2014-09-30 66 views
0

我有這段代碼:PHP選擇查詢返回false

$result = mysqli_query($con , 'SELECT * FROM messages WHERE group = "'.$_POST['group'].'" ORDER BY date '.$_POST['order'].''); 

我不明白爲什麼它總是返回我的假。變量$ _POST ['group']和$ _POST ['order']不是空的。

$_POST['group']='PHP' 
$_POST['order']='DESC' 

數據庫的連接也是corect。

+0

添加'echo mysqli_error()'...並且永遠不要在您的SQL語句中直接使用不安全的POST變量。 – DerVO 2014-09-30 17:50:41

+0

你是什麼意思:「廣告回聲mysqli_error()」 – Montoolivo 2014-09-30 17:52:06

+0

這:'ORDER BY日期'可能是問題。試試:'ORDER BY'date''。 – 2014-09-30 17:52:29

回答

-1
$result = mysqli_query($con , "SELECT * FROM messages WHERE group = '".mysqli_real_escape_string($_POST['group'])."' ORDER BY date '".mysqli_real_escape_string($_POST['order'])."'"; 

嘗試格式化查詢,看看它是否有助於您的結果。我還添加了mysqli_real_escape_string()以避免您的輸入,因爲您的查詢已廣泛開放給SQL注入。

http://php.net/manual/en/mysqli.real-escape-string.php

+0

爲什麼投票表決不成功? – timgavin 2014-09-30 20:24:58

+0

您將以您的訂單價值在單引號之間'... ORDER BY date'DESC'' – 2014-10-22 19:24:30

+0

那麼,您爲什麼不直接發表評論並給我機會修復,而不是投下? – timgavin 2014-10-22 21:27:36

0

GROUPmysql reserved word,需要使用反引號被引用;

SELECT * FROM messages WHERE `group` = ... 

您也可以開放SQL注入,您不應該以字符串格式向您的SQL添加未驗證/未轉義的POST數據。使用用戶數據進行查詢的最安全方法是使用準備好的語句,或者 - 作爲不太安全的替代方法 - 使用mysqli_real_escape_string轉義數據。

+1

這是很容易忘記那些該死的保留字! :) – timgavin 2014-09-30 17:58:38

+1

我改變了組到組,它的工作。我知道羣組是一個關鍵字,但是當我命名錶格的列時,PHP My Admin沒有給我一個錯誤。謝謝你的時間。 – Montoolivo 2014-09-30 18:13:48