-6

我有一个 MySQL 查询,由于某种原因不会更新它应该更新的表。

mysql_query("INSERT INTO newsletteroptions (email, exists)
VALUES (\"".$_POST['email']."\", \"".$_POST['exists']."\")");

我检查了我的代码,我确定那是导致错误的行,因为它工作之前的行 - 我进入并编辑了数据库中的信息,它仍然截断了表格(见下文)

我不知道为什么该片段不起作用,因为我从另一个文档中复制了它,几乎与我创建和测试的完全相同,并且它起作用了。

我还检查以确保我正确拼写了表格和字段名称,它们都是正确的。

这是完整的代码:

echo "
<form action=\"newsletterinfo.php?status=done\" method=\"post\" name=\"article\" target=\"_self\">
<a title=\"The email address the newsletter is sent from\">Newsletter email address:</a><input type=\"email\" name=\"email\" value=\"".$email."\"><br />
<label for=\"exists\">Activate newsletter?</label> <input type=\"checkbox\" id=\"exists\" name=\"exists\" value=\"true\" ".$checkyes."><br />

<input name=\"\" type=\"submit\" value=\"Update\" />
</form>";
}
else
{

$con = mysql_connect("WITHHELD","WITHHELD","WITHHELD");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("newsdb", $con);

    //Add article to database
    mysql_query("TRUNCATE TABLE newsletteroptions");
    mysql_query("INSERT INTO newsletteroptions (email, exists)
    VALUES (\"".$_POST['email']."\", \"".$_POST['exists']."\")");

mysql_close($con);
}
4

3 回答 3

2

您需要阅读 sql injection 并切换到 PDO / mysqli 和准备好的语句。

但是,您遇到的问题是由保留字,引起的EXISTS,因此查询的开头必须如下所示:

INSERT INTO newsletteroptions (email, `exists`) VALUES ...
于 2013-06-15T01:22:40.670 回答
1

不推荐使用 mysql_* 函数。您应该使用新的 mysqli 或 pdo 函数。

此外,您还应该在连接到 SQL 语句之前对您的 post 变量进行转义+清理。否则存在 SQL 注入的风险。

最后,尝试将您\"的替换为'包含您的字符串值。

此外,jeroen 的回答也符合exists关键字。

于 2013-06-15T01:22:45.277 回答
1

exists是保留字:http ://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

重命名列或用 ` 字符包围单词“存在”

于 2013-06-15T01:24:05.527 回答