MySQL更新命令错误。 (在php中)
早上好,大家好,MySQL更新命令错误。 (在php中)
我在php中使用更新命令来更新mysql中的数据。这是我的代码:
$sql=mysql_query("UPDATE blpublication SET JournalName = '$_POST[journal]', AcceptanceDate = '$_POST[acceptancedate]', PublishedDate = '$_POST[publisheddate]', Comment = '$_POST[comment]'
WHERE JobNo = '$_POST[jobno]'");
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "record Updated";
它确实更新字段,但是,它给了我以下错误。而我无法弄清楚为什么我得到这个错误。 “错误:你在你的SQL语法错误;检查对应于你的MySQL服务器版本,在1号线附近使用‘1’正确的语法手册”
你能帮我在这
最佳 Zeeshan
你能告诉我们$sql
的确切输出是什么吗?顺便说一下,BIG有安全漏洞。你应该总是逃生查询输入,即:
$journal = mysql_real_escape_string($_POST['journal']);
$acceptance_date = mysql_real_escape_string($_POST['acceptancedate']);
$publish_date = mysql_real_escape_string($_POST['publisheddate']);
$comment = mysql_real_escape_string($_POST['comment']);
$job_no = intval($_POST['jobno']); // assuming jobNo is a number
$sql = <<<END
UPDATE blpublication
SET JournalName = '$journal',
AcceptanceDate = '$acceptance_date',
PublishedDate = '$publish_date',
Comment = '$comment'
WHERE JobNo = $jobno
END;
mysql_query($sql);
if (mysql_error()) {
die("Error executing query '$sql': " . mysql_error());
}
echo "record Updated";
谢谢你Cletus。它现在工作完美。 :) – 2009-06-24 13:36:34
首先,你的代码很容易出现SQL injection,逃避你的POST值:
$journal = mysql_real_escape_string($_POST['journal']);
而实际调试您的查询,我们需要查询本身。在实际执行查询之前添加echo()语句并发布结果,POST值可能包含一些意外的值。
我认为问题在于你正在运行mysql_query两次。它第一次工作并返回1(真),你分配给$ sql。然后再次调用mysql_query,传递$ sql(等于1)。当然,“1”不是有效的SQL查询,所以你会得到语法错误。
我完全同意你必须净化这些输入!
您的一般UPDATE语法看起来不错,除了明显的注入可能性,但您需要输出$ sql。你的一个变量可能在其报价或其他一些问题,这样的....
看在你的代码的SQL语句UPDATE
,有一件事我跃起出来。表名是blpublication
,你可能错过了't',即tblpublication
?
而且你真的应该净化你的投入,否则你将成为一个SQL injection attack的受害者。
尝试连接$ _POST值。林不知道如果包括他们没有引用密钥是可能的?
$sql= mysql_real_escape_string("UPDATE blpublication SET JournalName = '".$_POST['journal']."', AcceptanceDate = '".$_POST['acceptancedate']."', PublishedDate = '".$_POST['publisheddate']."', Comment = '".$_POST['comment']."'
WHERE JobNo = '".$_POST['jobno']."'");
$result = mysql_query($sql);
注意:mysql_ *命令已折旧。你应该切换到mysqli_*。
做一个“echo $ sql;”然后将查询发送到MySQL服务器以检查实际发送到服务器的内容。 另外请注意,你应该永远不要把用户输入直接放入SQL查询(又名“SQL注入”) - 总是过滤,验证和/或消毒用户输入! – 2009-06-24 13:21:51
我的主。这是一个SQL注入攻击等待发生。 – 2009-06-24 13:21:56
很奇怪,没有人建议准备好声明而不是转义输入。例如,请参阅http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php。 – mlt 2012-06-13 21:29:59