我正在运行以下命令作为测试,看看我是否正确执行了这部分脚本,我已经在 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/