php - 更新记录语法错误

标签 php mysql

我正在尝试为慈善机构制作一个表格,允许工作人员通过网站查看和更新​​存储在 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/

相关文章:

mysql - 如何将这个复杂的查询添加到 CDbCriteria (Yii 1.x)

php - MYSQL - 选择不与其他表连接的所有行

php - 如何定义 Doctrine 中的 n-m 关系?

php - magento 模块设置存储在哪里?

mysql - 应用程序中的azure mysql未启动

mysql - 在 C# 应用程序的 MySQL 数据库中的非常大的表中,简单的选择查询需要更多的时间

php - Laravel 5,Behat,Mink : base_url parameter is not read from behat. yml

php - MySQL查找行

php - while ($row = mysql_fetch_array($result)) - 执行了多少个循环?

PHP 创建表然后允许用户单击按钮从表中获取信息