【发布时间】:2011-12-29 13:33:52
【问题描述】:
我正在运行以下命令,以测试我是否正确地编写了这部分脚本,我已经在 mysql 数据库中有如下记录: 如果在我的表单中,我将上述信息放入每个表单字段并点击提交,应该会发生什么是它选择等于发布的leadname和emailformname的记录,并使用新日期更新具有相同leadname和emailformname的记录表单中的 [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' 附近使用正确的语法
顺便说一句,由于各种原因我不能使用无重复键索引方法来更新记录,因此我需要通过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());
?>
【问题讨论】:
-
我认为您应该考虑在将帖子值转储到查询中之前对其进行清理。这将防止注射。
标签: mysql if-statement record exists