2012-10-14 250 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。 –

相关问题