2014-01-05 138 views
0

我正在搜索我的網站,搜索項存儲在數據庫中。'where子句'中的未知列'xxx'

這裏是我的代碼

<?php 
$search = $_GET["q"]; 
if ($search <= "") { 
} 
else { 
    $con = mysql_connect("localhost", "cl49-XXX", "XXX"); 
    if (!$con) { 
    die('Could not connect: line 513 ' . mysql_error()); 
    } 

mysql_select_db("cl49-XXX", $con) or die("Unable to select database"); 

$result = mysql_query("SELECT * FROM registrations WHERE 'rname' LIKE '%$search%'") or die('Error: Line 519 (' . mysql_error() . ')'); 

$num_rows = mysql_num_rows($result); 
if ($num_rows=="0"){ 
    echo"<h4>&nbsp;&nbsp;&nbsp;&nbsp;No Results Found for <b>$search</b>. Please try a different search</h3>"; 
    } 

    else { 
echo "<h3>$num_rows results found for <b> $search</b></h3><br /><br />"; 
    } 

如果我搜索了名爲「唐娜」(這個名字是在DB)我得到的錯誤

Unknown column 'donna' in 'where clause'

+0

不使用表名和表引用屬性名稱 –

+0

反引號(')是不一樣的倒逗號(') – Strawberry

回答

4

由於所有社區說:不請使用mysql_函數,請嘗試mysqli或PDO。
建議:逃脫輸入,預防注射等

務必:$search = mysql_real_escape_string($_GET["q"]);

而改變這一行

$result = mysql_query("SELECT * FROM registrations WHERE `rname` LIKE '%". $search ."%'") or die('Error: Line 519 (' . mysql_error() . ')'); 

編輯(腳本的改進)。
mysql_num_rows返回一個整數值,所以,爲什麼你要比較它與字符串?

$num_rows = mysql_num_rows($result); 
if (!$num_rows){ 

或者if ($num_rows == 0) ...

+0

我的代碼更改此,但仍然有同樣的問題? – Shane

+0

凱,告訴我什麼是生成的SQL。使用''$ result = mysql_query($ sql =「SELECT * FROM registrations WHERE'rname' LIKE'%」。$ search。「%'」)or die('Error:Line 519('。mysql_error()。') )'); echo $ sql;'' – CentaurWarchief

+0

whith這個代碼我得到服務器錯誤 – Shane

0

假設在你表中的列名是rname

WHERE 'rname' LIKE 

應該

WHERE rname LIKE 
+0

其實它應該是'\'rname \''。 –

+0

@LightnessRacesinOrbit真的沒有必要:) – Galz

+1

在這個特殊情況下可能沒有必要,但這是一個很好的做法!特別是當你在教學時,你是誰。 –

1

變化

mysql_query("SELECT * FROM registrations WHERE 'rname' LIKE '%$search%'") 

mysql_query("SELECT * FROM `registrations` WHERE `rname` LIKE '%".$search."%'") 
+0

這是「服務器錯誤」? – Shane

+0

對不起,我已修復查詢,你現在可以試試看嗎? –

+0

對不起,仍然收到相同的錯誤 – Shane

0

有`和之間的差」。你在這篇文章中使用了'rname和'%$ search%'。我猜你實際上在代碼中使用了`%$ search%`。

更改您的代碼如下。

$result = mysql_query("SELECT * FROM registrations WHERE `rname` LIKE '%$search%'") or die('Error: Line 519 (' . mysql_error() . ')');