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

+1

做一个“echo $ sql;”然后将查询发送到MySQL服务器以检查实际发送到服务器的内容。 另外请注意,你应该永远不要把用户输入直接放入SQL查询(又名“SQL注入”) - 总是过滤,验证和/或消毒用户输入! – 2009-06-24 13:21:51

+2

我的主。这是一个SQL注入攻击等待发生。 – 2009-06-24 13:21:56

+0

很奇怪,没有人建议准备好声明而不是转义输入。例如,请参阅http://*.com/questions/60174/best-way-to-prevent-sql-injection-in-php。 – mlt 2012-06-13 21:29:59

你能告诉我们$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"; 
+0

谢谢你Cletus。它现在工作完美。 :) – 2009-06-24 13:36:34

我首先净化你的输入。这可能会导致一些非常令人讨厌的错误,例如您正在经历的和恶意攻击。看起来SQL Injection

类似于以下post,我相信,当您有任何对象或数组语法,你需要把在大括号。

SET JournalName = '${_POST[journal]}' 

编辑:是的,正如其他人指出你冒着SQL注入风险。

+0

嗯......错误的语言? PHP中没有SET。你也可以不用大括号使用它。 – soulmerge 2009-06-24 13:22:44

+0

@soulmerge - SET位于SQL查询中。 – Eli 2009-06-24 13:26:07

首先,你的代码很容易出现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_*