2012-10-14 248 views
-1

我不明白爲什麼mysql_query($update)不在這裏執行。所有代碼對我來說都很好,var_dump'ing元素會得到期望的值。 echo $passed_title;正在執行而沒有來自上一行的警告,如上述未執行(數據庫未更新)。爲什麼?爲什麼我的SQL沒有執行?

$ask_if_empty = "SELECT id FROM content WHERE id='{$passed_id}'"; 
$ask_if_empty2 = mysql_query($ask_if_empty) or die($error[25]); 

if (mysql_num_rows($ask_if_empty2) !== 0) 
{ 
    $update = "UPDATE content SET title='{$passed_title}' WHERE id='{passed_id}'"; 
    mysql_query($update) or die($error[25]); 
    echo $passed_title; 
} 
+2

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。另請參閱[爲什麼我不應該在PHP中使用'mysql'函數?](http://goo.gl/ycnmO) –

+0

您的變量'passed_id'缺少$'' –

+0

「所有代碼對我來說都很好, var_dump'元素結果期望值「 - 真的嗎? 'echo $ update'; –

回答

4

你缺少一個$

$update = "UPDATE content SET title='{$passed_title}' WHERE id='{$passed_id}'"; 

我強烈建議在SQL查詢中使用它們之前轉義字符串。你可以用mysql_real_escape_string來做到這一點。否則,你是開放的SQL注入攻擊:

$passed_title = mysql_real_escape_string($passed_title); 

如果$passed_id是一個整數,你應該防止惡意輸入使用intval()

$passed_id = intval($passed_id); 
+1

恥辱對我來說:'/ –

0

如果id列是一個整數,你可能需要刪除值爲id='{$passed_id}'的單引號。

+0

(如果OP的錯字只是這個問題的錯字)好點! –

+0

壞點,允許使用引號。 –

+0

是的,這就是爲什麼我說*可能*。在postgresql中他們不是,不知道是否同樣適用於mysql。 –

相關問題