除了我还没有包含可能导致我收到此错误的数据库连接器之外?
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在正确的语法附近使用' UPDATE EventData SET deviceID =" 631403956MB21"在哪里deviceID =" 4631403956MB'在第1行"
这是我的php mysqli多查询。
$sql = "UPDATE Device SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$sql .= "UPDATE EventData SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$sql .= "UPDATE NotifyQueue SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$sql .= "UPDATE RuleTrigger SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$sql .= "UPDATE RuleList SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$result = mysqli_multi_query($db, $sql);
if ($result) {
echo 'true';
} else {
echo 'false';
echo mysqli_error($db);
}
mysqli_close($db);
谢谢, 麦克
答案 0 :(得分:1)
插入/更新多个查询并使用循环时禁用自动提交:
$mysqli = dbConnect(); // Connect with database
$mysqli->autocommit(FALSE); // Set autocommit off
// You can prepare and bind outside the foreach loop, so you don't
// have to write and bind each query individually.
$sql = "UPDATE RuleList SET deviceID = ? WHERE deviceID = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ii', $deviceID1, $deviceID2);
foreach($ids as $id):
$deviceId1 = $id;
$stmt->execute();
endforeach;
$stmt->close();
$mysqli->commit(); // Commit all queries
$mysqli->close();
以上是一个例子
答案 1 :(得分:0)
正确查询:
<?php
$myImagesList = array (
'image1.png' ,
'image2.png' ,
'image3.png'
);
shuffle ($myImagesList);
echo '<div style = "background: #0600ff" class = "div02">';
for ($i=0; $i<5; $i++) {
if ($i < 5) {
echo '' . $myImagesList[$i] . '';
}
if ($i == 5) {
echo '</div>';
echo ' <script type='text/javascript'>
var cpmstar_pid = 45265;
document.writeln('<SCR' + 'IPT language='Javascript' src='' + (document.location.protocol=='https:'?'//server':'//cdn') + '.cpmstar.com/cached/js/feedback_v101.pack.js'></SCR' + 'IPT>');
</script> ';
echo '<div style = "background: #0600ff" class = "div02">';
}
if ($i > 5) {
echo '' . $myImagesList[$i] . '';
}
}
echo '</div>';
?>
所以,最后,你没有分配“;”在每个查询结束时。您只分配一个“;”在PHP代码的最后。
UPDATE Device SET deviceID = '631403956MB21' WHERE deviceID = '4631403956MB2';
UPDATE EventData SET deviceID = '631403956MB21' WHERE deviceID = '4631403956MB2';
...
↓↓↓
$sql = "UPDATE Device SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
$sql .= "UPDATE EventData SET deviceID = \"631403956MB21\" WHERE
deviceID = \"4631403956MB2\" ";
...
请尝试并希望它有所帮助。
答案 2 :(得分:-1)
您不应在同一查询中包含多个UPDATE
子句。您尝试使用mysqli_multi_query
,但需要使用分号分隔查询:
首先创建一个数组:
$queries = [
"UPDATE Device...",
"UPDATE EventData...",
"UPDATE NotifyQueue...",
];
从那里你有两个选择。首先是循环并一次执行一个查询
foreach($queries as $sql):
$result = mysqli_query($db, $sql);
...
endforeach;
这不是一个好主意,因为它需要多次访问数据库。更好的选择是您实际尝试执行的操作:执行多查询语句
$multi_query = implode('; ',$queries);
mysqli_multi_query($db, $multi_query);
...
重要提示
multi_query
不使用预准备语句,因此如果您不小心,您将容易受到SQL注入攻击。使用这种方法,在将它们包含在查询中之前,请务必转义字符串并将所有数值转换为数字(例如:$var = (int)$var
)。
顺便说一下,我注意到您在多个表格中deviceID
进行了相同的更改。这可能表明您的架构设计不佳。如果您有InnoDB表,则可以使用主键和外键来指示deviceID
,EventData
...表中的NotifyQueue
是链接到{中的主键的外键{1}}表。然后,如果您在更新时将更改设置为级联,则您需要做的就是更改Device
表中的ID,并且数据库将负责在其他任何位置更改它。这是quick intro to the concept。