$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/
发布于 2014-08-06 00:24:55
mysql已被弃用,但它也不允许在单个查询中使用多个语句。
但是,您可以使用mysqli_multi_query在mysqli的单个查询中使用多个语句
发布于 2014-08-06 00:26:15
直接的问题是,您在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子句,您实际上可以将其作为一条语句运行。这是相同的逻辑。
发布于 2014-08-06 00:55:40
您正在使用反模式来实现以下代码:更新callplancopy表(其中number列不为null)中的所有行,以将列设置为等于某个值。
(注意:原始UPDATE语句中的"WHERE number =“将有效地防止该列中具有空值的行被更新。)
整个混乱的代码正在执行RBAR (逐行痛苦的行),这可以通过向数据库发出一条UPDATE语句来更简单、更有效地完成:
UPDATE callplandata d
SET d.`somecol` = 'someval'
WHERE d.number IS NOT NULL(注意:包含WHERE子句是为了重现原始UPDATE语句的行为,避免更新number列为NULL的行。如果这不是我们想要的,或者不是必需的,那么可以省略WHERE子句。)
(注意:这里假设您为列分配了一个文字值,就像在最初的更新中一样,我们看到用单引号括起来的"callplancopy“,使其成为字符串文字。如果您打算从行中的另一列复制值,那么我们应该用反引号将列标识符括起来,而不是用单引号。)
SET d.`somecol` = d.`some_other_col`如果我们坚持使用不推荐使用的mysql接口,我们真的需要使用mysql_real_escape_string函数来使不安全的值“安全”地包含在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接口。
https://stackoverflow.com/questions/25143724
复制相似问题