我在弄清楚错误来自何处时遇到了一些问题。 背景是我有一个表,并使用一个表单将值更新到表中,并且可以使用不同的按钮更新它们和删除它们。
这使得删除后自动递增的 ID 变得困惑,我认为看看是否可以使用简单的按钮重置顺序是一个很好的做法。
否则我一直在使用
更新它们SET @num := 0;
UPDATE tableName SET id = @num := (@num+1);
ALTER TABLE tableName AUTO_INCREMENT = 1;
在 phpmyadmin.我从这个答案中得到了它: Auto Increment after delete in 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();
我得到的错误是: 设置@num := 0;更新 powerdata SET id = @num := (@num+1);更改表 powerdata AUTO_INCRMENT = 1;
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'UPDATE powerdata SET id = @num := (@num+1); 附近使用的正确语法。 ALTER TABLE powerdata AUTO_INCRMENT' 在第 1 行
我试图通过将多行语句放入 phpmyadmin 来搜索拼写错误,但一无所获,而且我看不出“代码结构”的问题出在哪里(如果有的话)。
最佳答案
当尝试在单个查询中执行多个语句时,您必须调用$mysqli->multi_query($sql)
而不是$mysqli->query($sql)
。
所以你需要更新
if ($mysqli->query($sql_resort) === TRUE) {}
到
if ($mysqli->multi_query($sql_resort) === TRUE) {
关于php - PHP 中的多行语句到 MySQL 数据库(采用自动递增 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493942/