vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   General Articles (https://vborg.vbsupport.ru/forumdisplay.php?f=189)
-   -   Keep this in mind... (https://vborg.vbsupport.ru/showthread.php?t=71175)

FASherman 10-29-2004 10:00 PM

Keep this in mind...
 
I've run across several hacks and add-on that don't properly handle prefixed tablenames. So, for my own sanity and to help others, I'm going to offer these two timesaving tips.

The first is pretty basic. Reference all VB tables like this:

Quote:

"SELECT * from " . TABLE_PREFIX . "user ..."
I know, it should be common sense, but I have seen this enough the last few days that it bears mentioning.

The second is a more common problem that occurs in programs where the programmer actually thinks he's properly handled prefixed tables, but really hasn't and never tests it on a prefixed table.

Its a problem with more complex SELECTs using JOIN statements. Here how it usually looks:

Quote:

"SELECT usergroup.usergroupid,usergroup.title, dlm_filequota.* FROM " . TABLE_PREFIX . "usergroup LEFT JOIN dlm_filequota ON (dlm_filequota.usergroupid = usergroup.usergroupid)"
The programmer thinks he's done right by using the TABLE_PREFIX tag, but not really because usergroup.usergroupid is undefined. The proper way to handle this, regardless of whether the VB table is the SELECT FROM table or a JOINed table is like this:

Quote:

"SELECT usergroup.usergroupid,usergroup.title, dlm_filequota.* FROM " . TABLE_PREFIX . "usergroup AS usergroup LEFT JOIN dlm_filequota ON (dlm_filequota.usergroupid = usergroup.usergroupid)"
I hope this helps everyone.

Xenon 10-30-2004 05:13 PM

Good thread, but was in wrong forum ;)

dwh 01-06-2005 01:42 AM

Quote:

Originally Posted by FASherman
I've run across several hacks and add-on that don't properly handle prefixed tablenames. So, for my own sanity and to help others, I'm going to offer these two timesaving tips.

The first is pretty basic. Reference all VB tables like this:



I know, it should be common sense, but I have seen this enough the last few days that it bears mentioning.

The second is a more common problem that occurs in programs where the programmer actually thinks he's properly handled prefixed tables, but really hasn't and never tests it on a prefixed table.

Its a problem with more complex SELECTs using JOIN statements. Here how it usually looks:



The programmer thinks he's done right by using the TABLE_PREFIX tag, but not really because usergroup.usergroupid is undefined. The proper way to handle this, regardless of whether the VB table is the SELECT FROM table or a JOINed table is like this:



I hope this helps everyone.

I don't get it. Every time you refer to a table you need to do AS? Why? I thought you only did it when it was ambiguous?

rake 01-06-2005 08:21 AM

Let's say you have the vb3_ prefix for tables. The above query would be..

"SELECT usergroup.usergroupid,usergroup.title, dlm_filequota.* FROM vb3_usergroup LEFT JOIN dlm_filequota ON (dlm_filequota.usergroupid = usergroup.usergroupid)"

See it now?

dwh 01-06-2005 10:18 AM

Aha!


All times are GMT. The time now is 08:52 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01147 seconds
  • Memory Usage 1,721KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (5)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete