php - PHP 中的多行语句到 MySQL 数据库(采用自动递增 ID)

标签 php mysql

我在弄清楚错误来自何处时遇到了一些问题。 背景是我有一个表,并使用一个表单将值更新到表中,并且可以使用不同的按钮更新它们和删除它们。

这使得删除后自动递增的 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/

相关文章:

php - 如何处理上传有问题的 JPEG 导致的错误?

php - PDO:是否需要 try-catch?

mysql concat 列作为字符串传递

php - CakePHP SQL 准备语句

c++ - 未解析的符号:sql::mysql::get_driver_instance(void)

php - 从准备好的选择查询中获取结果

php - 如何选择具有相同唯一外国ID的最新记录?

php - 过滤数字 PIN 码字符串数组,格式可能为 "######"或 "### ###"

php - Mysql 左外连接列不存在 - CodeIgniter DataMapper ORM

MySQL使用frm、myd和myi文件恢复数据库功能