[英]Multi line statement in PHP to MySQL database (resorting auto incremented IDs)
我有一个问题,找出错误的来源。 背景是我有一个表,并使用表单将值更新到表中,并且可以使用不同的按钮来更新和删除它们。
删除后,这会使自动递增的ID处于混乱状态,我认为这是一个很好的做法,看看我是否可以使用简单的按钮重置订单。
否则我一直在使用
SET @num := 0;
UPDATE tableName SET id = @num := (@num+1);
ALTER TABLE tableName AUTO_INCREMENT = 1;
在phpmyadmin中。 我从这个答案中得到的: 在MySQL中删除后自动递增
//resort database
if(isset($_POST['resort'])){
// Database connection opening
$mysqli = NEW MySQLi('localhost','root','','powerstations'); //our server, the username, the password (empty), the database itself
if($mysqli) {
echo "Connected!";
} else {
echo "Problem.";
}
$sql_resort = "SET @num := 0; ";
$sql_resort .= "UPDATE powerdata SET id = @num := (@num+1); ";
$sql_resort .= "ALTER TABLE powerdata AUTO_INCREMENT = 1; ";
if ($mysqli->query($sql_resort) === TRUE) {
echo "Resorted successfully";
} else {
echo "Error: " . $sql_resort . "<br>" . $mysqli->error;
}
$mysqli->close();
我得到的错误是:SET @num:= 0; 更新powerdata SET id = @num:=(@ num + 1); ALTER TABLE powerdata AUTO_INCREMENT = 1;
您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'UPDATE powerdata SET id = @num:=(@ num + 1)附近使用; 第1行的ALTER TABLE powerdata AUTO_INCREMENT'
我试图通过将多行语句放入phpmyadmin中来搜索拼写错误,但一无所获,而且我不知道“代码结构”的问题在哪里。
尝试在单个查询中执行多个语句时,必须调用$mysqli->multi_query($sql)
而不是$mysqli->query($sql)
。
所以你需要更新
if ($mysqli->query($sql_resort) === TRUE) {}
至
if ($mysqli->multi_query($sql_resort) === TRUE) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.