Mysql更新记录出错

标签 mysql if-statement record exists

我正在运行以下命令作为测试,看看我是否正确执行了这部分脚本,我已经在 mysql 数据库中拥有如下记录: 如果在我的表单中,我将上述信息放入每个表单字段中并单击“提交”,则应该选择与发布的领导名称和电子邮件表单名称相同的记录,并使用新日期更新具有相同领导名称和电子邮件表单名称的记录表单中的 [datesent] 字段。

所以我运行以下命令:

<?php
$query = mysql_query("IF EXISTS(SELECT * FROM hqfjt_email_history WHERE     leadname='$_POST[leadname]' AND emailformname='$_POST[emailformname]') 
THEN UPDATE hqfjt_email_history (datesent) VALUES ('$_POST[datesent]') WHERE     emailformname='$_POST[emailformname]' AND leadname='$_POST[leadname]'
") or die(mysql_error());
?>

但我没有更新该字段,而是收到错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行 'IF EXISTS(SELECT * FROM hqfjt_email_history WHERE Leadname='Brian Cox' AND email' at line 1

附近使用的正确语法

顺便说一句,由于各种原因,我无法使用无重复键索引方法来更新记录,因此我需要通过 Leadname 和 emailformname 这两个字段来标识记录。

除了我的错误编码(可能是问题)之外,我看不出上述查询失败的原因,因为数据库中只有一条记录这两个字段= true。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

感谢大家的帮助,如果我想插入空记录,现在这是正确的吗?我不确定如何清理我在最后添加的部分?。

 <?php
 $sql = "IF EXISTS (
        SELECT * FROM hqfjt_email_history 
        WHERE leadname= '" . mysql_real_escape_string($_POST['leadname']) . "' 
        AND emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "'
    ) 
    THEN
        UPDATE hqfjt_email_history 
        SET datesent = '" . mysql_real_escape_string($_POST['datesent']) . "'
        WHERE emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "' 
        AND leadname = '" . mysql_real_escape_string($_POST['leadname']) . "'
    ELSE
    INSERT INTO hqfjt_email_history
    (id, leadname, emailformname, datesent) VALUES     ('$_POST[id]','$_POST[leadname]','$_POST[emailformname]','$_POST[datesent]')";
$query = mysql_query($sql) or die(mysql_error());
?>

最佳答案

您的 UPDATE 语句是错误的。 应该写成:

UPDATE <table>
SET <columnname> = <value>
WHERE <condition>

所以...

$sql= "UPDATE hqfjt_email_history 
SET datesent = '" . mysql_real_escape_string($_POST['datesent']) . "'
WHERE emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "' 
AND leadname = '" . mysql_real_escape_string($_POST['leadname'] . "'"

请注意,我添加了 mysql_real_escape_string()函数围绕变量以避免注入(inject)和撇号问题。

所以最终你的 PHP 应该是:

$sql = "IF EXISTS (
            SELECT * FROM hqfjt_email_history 
            WHERE leadname= '" . mysql_real_escape_string($_POST['leadname']) . "' 
            AND emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "'
        ) 
        THEN 
            UPDATE hqfjt_email_history 
            SET datesent = '" . mysql_real_escape_string($_POST['datesent']) . "'
            WHERE emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "' 
            AND leadname = '" . mysql_real_escape_string($_POST['leadname']) . "'";
$query = mysql_query($sql) or die(mysql_error());

尽管如此,我不明白为什么您将 IF EXISTS ( ... ) 添加到查询中。因为基本上你只需检查记录是否存在,如果存在则更新它。但是,如果您对不存在的记录进行更新,它根本不会更新任何内容......因此它不会对写入造成任何损害

$sql = "UPDATE hqfjt_email_history 
            SET datesent = '" . mysql_real_escape_string($_POST['datesent']) . "'
            WHERE emailformname = '" . mysql_real_escape_string($_POST['emailformname']) . "' 
            AND leadname = '" . mysql_real_escape_string($_POST['leadname']) . "'";

关于Mysql更新记录出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668509/

相关文章:

mysql - 插入自定义表时是否仍应转义数据?

javascript - 当我在函数中使用 if 语句时,为什么我的 javascript 不起作用

java - 生成 1 到 100 之间的 1 到 300 个数字并将每个数字放入字符串中时遇到问题

clojure - 记录在排序时能保证顺序吗?

mysql - 在 Mysql 上连接多个表

PHP 和 MYSQL : Is my system safe?

Java记录反射和合成方法

python record.fromarrays错误 "array-shape mismatch in array"

mysql - 向 MySQL 查询添加限制子句会显着减慢它的速度

C# IF 语句不排除字符串