2012-01-05 156 views
0

此查詢有什麼問題?Mysql查詢錯誤

$query2=mysql_query("SELECT * FROM $t_medici WHERE `oras` LIKE $orase") or die(mysql_error()); 

此代碼返回

Unknown column 'Bucuresti' in 'where clause' 
+0

您的問題尚不清楚... – diEcho 2012-01-05 18:45:23

+1

SQL注入漏洞與此查詢有什麼關係。 – 2012-01-05 18:45:35

+0

't_medici'表是什麼樣的? – 2012-01-05 18:45:52

回答

3

$orase需要加引號。

$query2=mysql_query("SELECT * FROM $t_medici WHERE oras LIKE '$orase'") or die(mysql_error()); 
0

$orase放在單引號內。 如果您需要使用%符號。

0

如果oras領域是一個字符串,然後$orase應該有它周圍的單引號:

$query2=mysql_query("SELECT * FROM $t_medici WHERE `oras` LIKE '$orase'") or die(mysql_error()); 

什麼情況是,可變$orase包含字符串Bucuresti當達到該行與SQL代碼因此結束像這樣:

...WHERE `oras` LIKE Bucuresti 

但你也應該逃避它(防止SQL我njection):

$query2=mysql_query("SELECT * FROM $t_medici WHERE `oras` LIKE '".mysql_real_escape_string($orase)."'") or die(mysql_error()); 

而且我把周圍的任何其他變量括號在雙引號字符串,即{$ t_medici}這裏:

$query2=mysql_query("SELECT * FROM {$t_medici} WHERE `oras` LIKE '".mysql_real_escape_string($orase)."'") or die(mysql_error()); 

在一個側面說明,如果你使用LIKE這樣的字符串,那麼返回的任何行都必須精確到Bucuresti(或任何$ orase成立),在它之前或之後(包括空格!)什麼都沒有。在這種情況下,完全沒有必要使用LIKE;你還不如用=像這樣:

"SELECT * FROM {$t_medici} WHERE `oras` ='".mysql_real_escape_string($orase)."'" 

但是如果你想以某種方式匹配具有Bucuresti(無論$ orase持有或)在oras領域的任何行(如「布加勒斯特」,「布加勒斯特」,「 kdsbks kksd saBucurestie」,等等),那麼你應該使用%像這樣:

"SELECT * FROM {$t_medici} WHERE `oras` LIKE '%".mysql_real_escape_string($orase)."%'" 

%Bucuresti% if $orase was hold Bucuresti

0

從互聯網複製查詢並編輯它時非常熟悉的錯誤。上面突出顯示的單引號。