我正在尝试为慈善机构制作一个表格,允许工作人员通过网站查看和更新存储在 SQL 数据库中的受害者记录。我已设法显示记录并创建一个允许更改记录的表单,但是当我输入变量时,我收到语法错误。
$updateSQL="UPDATE Victims SET victimFName=".$victimFN." WHERE victimId=".$id."";
$exeupdateSQL= mysql_query($updateSQL) or die (mysql_error());
echo "The Record has been updated";
我收到错误: '您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“WHEREvictimId=”附近使用的正确语法
然后我研究了 SQL 注入(inject)并更改了代码:
$updateSQL="UPDATE Victims SET victimFName=".mysql_real_escape_string($_POST['victimFName']).";
WHERE victimId=".mysql_real_escape_string($_POST['victimId'])."";
exeupdateSQL= mysql_query($updateSQL) or die (mysql_error());
echo "The Record has been updated";
这仍然不起作用。
我尝试通过在 SQL 查询中输入数据来替换我的变量 $VictimFN 和 $id,并且代码可以工作,更新记录。如:
$updateSQL="UPDATE Victims SET victimFName='Mary Smith' WHERE victimId='1'";
$exeupdateSQL= mysql_query($updateSQL) or die (mysql_error());
echo "The Record has been updated";
我对编程相当陌生,想知道如何解决这个问题,因为问题与我的变量有关。
<小时/>感谢您的帮助,我已经确定了代码的问题,现在已将其修复为:
$updateSQL="UPDATE Victims SET victimFName='".mysql_real_escape_string($_POST['victimFName'])."' WHERE victimId='".mysql_real_escape_string($_POST['victimId'])."'";
$exeupdateSQL=mysql_query($updateSQL) or die (mysql_error());
echo "The Record has been updated";
echo "<br><a href=ViewVictimRequest.php>View Updated Record</a>";
现在没有错误,但是记录表明它们已更新,但实际上并未更新。有没有什么办法解决这一问题?
提前感谢您的回复,对于给您带来的不便,我们深表歉意!
最佳答案
正确的做法是:
$updateSQL="UPDATE Victims SET victimFName='".mysql_real_escape_string($_POST['victimFName'])."' WHERE victimId='".mysql_real_escape_string($_POST['victimId'])."'";
您的 $_POST 值是字符串,因此您需要将它们括在单引号 '
中。还要删除 WHERE
之前的分号 ;
,它会破坏字符串。
注意:
Please, don't use mysql_*
functions in new code 。它们不再维护and are officially deprecated 。请参阅red box ?了解 prepared statements相反,并使用 PDO ,或MySQLi -this article将帮助您决定哪个。如果您选择 PDO,here is a good tutorial .
关于php - 更新记录语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043128/