这是我的代码。
<?php
$a = bacon;
$b = 20;
$c = 30;
$link = mysql_connect('localhost','root','');
mysql_select_db("test", $link);
$sql = "UPDATE share SET price=".
PrepSQL($b) . ", place=" .
PrepSQL($c) . ", time=CURRENT_TIMESTAMP where num=1 and RID=(select IID from ingredient where Ingredient='" . PrepSQL($a) . "')";
mysql_query($sql);
function PrepSQL($value)
{
// Stripslashes
if(get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote
$value = "'" . mysql_real_escape_string($value) . "'";
return($value);
}
?>
我发现上面的代码无法更新数据库表。 但是,如果我改变where条件 其中num = 1且RID =(从成分中选择IID,其中成分= '培根')“ 然后,一切正常。 那么,我的代码有什么问题吗? 非常感谢!
答案 0 :(得分:0)
如果它应该是一个字符串,那么它需要它周围的引号。
$a = 'bacon';
答案 1 :(得分:0)
你应该使用:
<?php
$a = "bacon";
$b = 20;
$c = 30;
$link = mysql_connect('localhost','root','');
mysql_select_db("test", $link);
$sql = "UPDATE share SET price=".
PrepSQL($b) . ", place=" .
PrepSQL($c) . ", time=CURRENT_TIMESTAMP where num=1 and RID=(select IID from ingredient where Ingredient='" . PrepSQL($a) . "')";
mysql_query($sql);
function PrepSQL($value)
{
// Stripslashes
if(get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote
$value = "'" . mysql_real_escape_string($value) . "'";
return($value);
}
?>
答案 2 :(得分:0)
您的子查询
"[...] (select IID from ingredient where Ingredient='" . PrepSQL($a) . "')"
应该是
"[...] (select IID from ingredient where Ingredient=" . PrepSQL($a) . ")"
因为对PrepSQL
的调用已经为您添加了单引号。
此外,请避免使用mysql_*
php函数,因为它们现在已被弃用!有关更多选项,请参阅:http://www.php.net/manual/en/mysqlinfo.api.choosing.php
编辑:
另外,您可能有一个未定义的bacon
常量,应该是"bacon"
。