2010-08-22 122 views
0

我創建了一個不起作用的用戶定義的sql查詢。用戶應該能夠在輸入字段中輸入搜索字符串,然後提交然後查看他們的搜索結果,但是每次我輸入搜索的內容時,我都知道該數據庫在數據庫中,我在「where子句」中獲取未知列「x」 「 錯誤信息。'where子句'中的未知列'xyz'

你能幫我解決這個問題嗎?下面是我寫的是到目前爲止的代碼...

... 
mysql_select_db("mydb", $c); 
$search = $_POST['search']; 

$rslt = mysql_query("SELECT * FROM mytable 
WHERE 'mycolumn' RLIKE $search"); 

while($row = mysql_fetch_array($rslt)) 
    { 
    echo $row['myrow']; 
    echo "<br />"; 
    } 

if (!$row) 
    { 
    die('uh oh: ' . mysql_error()); 
    } 

?> 
+0

嘗試使用反引號而不是引號時「包裝」表或列名稱,但你應該引用字符串,如$ search – 2010-08-22 16:59:58

+0

那麼你有一個名爲mycolumn的列在那裏?和一個名爲mytable的表? – Iznogood 2010-08-22 17:02:02

回答

4

更改代碼這樣:
1)轉換報價到各地列名反引號。
2)使用單個qoutes環繞$搜索,使其成爲一個字符串。

$rslt = mysql_query("SELECT * FROM mytable WHERE `mycolumn` RLIKE '{$search}'"); 
+0

[反斜槓是不必要的,除非列名也是MySQL中的保留字](http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html) – 2010-08-22 17:08:26

+0

非常感謝大家! ! :) – 2010-08-22 17:13:25

+0

@OMG小馬,是的,但我們不知道在他的代碼中mycolumn是否是保留名稱。所以,遵循這種做法總是安全的。 – shamittomar 2010-08-22 17:23:55

0

我想補充一些關於安全性和性能的內容。

將用戶輸入(任何GET,POST或cookie數據)直接放入SQL查詢是不安全的。這是一個嚴重的安全問題,稱爲SQL injection。要避免它,請使用mysql_real_escape_string()函數。

此外,SELECT * FROM mytable ...不是一個好的做法。建議明確列出,即使所需的所有列,如果他們都:

SELECT col1, col2, col3, col4, col5 FROM mytable ... 
1

這有助於肯定 只是改變變量$搜索將被解讀爲一個字符串即$search 所以它會是這樣

$rslt = mysql_query("SELECT * FROM mytable WHERE mycolumn RLIKE '$search'");