更新记录语法错误

时间:2014-04-13 13:07:53

标签: php mysql

我试图为慈善机构制作表格,允许员工通过网站查看和更新​​存储在SQL数据库中的受害者记录。我已设法显示记录并创建一个允许更改记录的表单,但是当我输入变量时,我收到SYNTAX错误。

    $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服务器版本相对应的手册,以便在' WHERE victimId ='附近使用正确的语法。在第1行'

然后我研究了SQL注入并更改了代码:

    $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>";

现在没有错误,但是记录表明它们不会更新。有没有什么办法解决这一问题?

提前感谢您的回复,并对给您带来的不便表示歉意!

2 个答案:

答案 0 :(得分:0)

正确的方法是:

$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,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

你有一个错误的分号和缺少引号。这是您查询的更简洁版本:

$updateSQL="UPDATE Victims SET victimFName='".mysql_real_escape_string($_POST['victimFName'])."'
WHERE victimId=".mysql_real_escape_string($_POST['victimId']);

或者

$fname = mysql_real_escape_string($_POST['victimFName']);
$id    = mysql_real_escape_string($_POST['victimId']);
$updateSQL="UPDATE Victims SET victimFName='{$fname}' WHERE victimId={$id}";