我有一个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);
}
答案 0 :(得分:2)
您需要阅读sql注入并切换到PDO / mysqli和预处理语句。
然而,您遇到的问题是由reserved word,EXISTS
引起的,因此查询的开头必须如下所示:
INSERT INTO newsletteroptions (email, `exists`) VALUES ...
答案 1 :(得分:1)
不推荐使用mysql_ *函数。你应该使用新的mysqli或pdo函数。
此外,在连接到SQL语句之前,还应该对post变量进行转义+清理。否则存在SQL注入的风险。
最后,尝试将\"
替换为包含字符串值的'
。
此外,jeroen的回答标有exists
关键字。
答案 2 :(得分:1)
exists
是保留字:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html
重命名列或用'characters
包围'exists'一词