在一个更新语句中更新多个MySQL表时出错

时间:2013-09-18 11:41:20

标签: php mysql

您好,

我有

  

查询为空

错误,更新数据时。

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1"))
{
   $updateSQL = sprintf("UPDATE client,release SET client.`client_name`=%s, release.`client_name`=%s WHERE client.`client_id`=%s AND release.`client_id`=%s", GetSQLValueString($_POST['newcust'], "text"), GetSQLValueString($_POST['select'], "int"));
   mysql_select_db($database_trackntrace, $trackntrace);
   $Result1 = mysql_query($updateSQL, $trackntrace) or die(mysql_error());
}

我认为查询存在问题,任何人都可以确定问题出在哪里。

亲切的问候

2 个答案:

答案 0 :(得分:4)

问题出在sprintf函数中。 你告诉sprintf你将传递4个字符串,但你只传递2。

因为您只传递了2个参数,并且它需要4,所以它将返回false。

尝试在代码上方添加以下内容:

error_reporting(E_ALL);
ini_set('display_errors', '1');

这是您应该使用上述设置获得的错误:

Warning: sprintf() [<a href='function.sprintf'>function.sprintf</a>]: Too few arguments

您想要将其更改为修复此问题:

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1"))
{
   $updateSQL = sprintf("UPDATE client,release SET client.`client_name`=%s, release.`client_name`=%s WHERE client.`client_id`=%s AND release.`client_id`=%s", GetSQLValueString($_POST['newcust'], "text"), GetSQLValueString($_POST['newcust'], "text"), GetSQLValueString($_POST['select'], "int"), GetSQLValueString($_POST['select'], "int"));
   mysql_select_db($database_trackntrace, $trackntrace);
   $Result1 = mysql_query($updateSQL, $trackntrace) or die(mysql_error());
}

答案 1 :(得分:2)

发布是保留字,请使用反引号。

UPDATE client,`release` SET client.`client_name`=%s, `release`.`client_name`=%s 
WHERE client.`client_id`=%s AND `release`.`client_id`=%s",     GetSQLValueString($_POST['newcust'], "text"), GetSQLValueString($_POST['select'], "int"));

http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html