$sql="SELECT retail_peak, number from callplandata ";
$rs=mysql_query($sql,$conn);
$sql2='';
while($result=mysql_fetch_array($rs)) {
$sql2.="UPDATE callplandata set ".$_POST["callplancopy_newname"]." = '".$result[$_POST["callplancopy"]]."' where number = '".$result["number"]."'; ";
}
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
我正在尝试运行上述查询,我在最后设置了$sql2
;
,所以我只运行一个查询而不是多个单独的查询。
我收到此错误消息:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE callplandata set dcabr = '0' where number = '44*116'; UPDATE callplandata' at line 1
当我回显$sql2
时,它看起来像 - http://www.wepaste.com/sql2/
答案 0 :(得分:0)
不推荐使用mysql,但它也不允许在单个查询中使用多个语句。
但是,您可以使用mysqli_multi_query
在mysqli的单个查询中使用多个语句答案 1 :(得分:0)
您当前的问题是,您正在连接while循环中的$sql2
个查询以生成一个长字符串,然后尝试将长字符串作为一个查询执行。
您应该将$sql2
的执行移到while循环中,然后放弃.=
运算符,转而使用=
:
$sql2=''; // Don't need this line
while($result=mysql_fetch_array($rs)) {
$sql2="
UPDATE callplandata
SET ".$_POST["callplancopy_newname"]."='".$result[$_POST["callplancopy"]]."'
WHERE number = '".$result["number"]."'
";
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
}
您也可以按照Rob的建议执行长字符串作为多重查询。
您还应该注意有关SQL注入和弃用函数的注释中的警告。
你实际上可以通过删除WHERE
子句将其作为一个语句运行..它是相同的逻辑。
答案 2 :(得分:0)
您正在使用反模式来实现此代码尝试实现的目标:更新callplancopy
表中的所有行(number
列不为空)以将列设置为等于一个值。
(注意:原始UPDATE语句中的" WHERE number =
"将有效地防止更新该列中具有NULL值的行。)
整个代码混乱都在执行RBAR(Row By Agonizing Row),只需向数据库发出一个UPDATE
语句就可以更简单有效地完成:
UPDATE callplandata d
SET d.`somecol` = 'someval'
WHERE d.number IS NOT NULL
(注意:包含WHERE
子句以重现原始UPDATE语句的行为,避免更新number
列为NULL的行。如果不希望这样,或者是没有必要,那么WHERE
子句可以省略。)
(注意:这假定您正在为列分配一个文字值,就像在原始UPDATE中一样,我们看到" callplancopy"用单引号括起来,使它成为字符串文字。如果你是意思是从行中的另一列复制值,然后我们将列标识符括在反引号中,而不是单引号。)
SET d.`somecol` = d.`some_other_col`
如果我们坚持使用已弃用的mysql界面,我们确实需要使用 mysql_real_escape_string
函数来制作不安全的值" safe"包含在SQL文本中。
$sql = "UPDATE callplandata d
SET d.`" . mysql_real_escape_string($_POST["callplancopy_newname"]) . "`"
. " = d.`" . mysql_real_escape_string($_POST["callplancopy"] . "`
WHERE d.number IS NOT NULL";
# for debugging, echo out the SQL text
#echo $sql;
注意:不推荐使用PHP mysql接口。新开发应该使用PDO或mysqli接口。