mariadb 在一个语句中删除和插入到表中时出现PHP PDO异常[42000][重复]

axkjgtzd  于 2022-11-08  发布在  PHP
关注(0)|答案(1)|浏览(156)

此问题在此处已有答案

PDO support for multiple queries (PDO_MYSQL, PDO_MYSQLND)(7个答案)
5个月前关闭。
我尝试删除任何具有指定列值的现有行(如果它们存在),并在单个预准备语句中直接在后面插入一个新行。

$sql = "DELETE FROM table WHERE id = :id;
        INSERT INTO table (col1,col2,col3,col4,col5) VALUES (:col1,:col2,:col3,:col4,:col5);";

我也试过:

$sql = "DELETE FROM table WHERE id = ?;
        INSERT INTO table (col1,col2,col3,col4,col5) VALUES (?,?,?,?,?);";

它们单独工作正常,但不能在一个语句中工作。抛出的确切错误是:
PHP致命错误:未捕获的PDO异常:数据库状态[42000]:语法错误或访问冲突:1064 1064您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“INSERT INTO...”附近使用的正确语法
语法错误指向了第二个语句的开头,所以我是否可能不应该依次运行delete和insert语句?我只安装了一个版本的mysql/mariadb,它总是最新的,并且语法在单独的语句中工作。操作系统是Windows。

bkkx9g8r

bkkx9g8r1#

@Don'tPanic评论了一个链接,给出了一个很好的答案:PDO support for multiple queries (PDO_MYSQL, PDO_MYSQLND)
在我的数据库配置模型中,由于某种原因,我将ATTR_EMULATE_PREPARES设置为false,将其设置为true修复了问题,语句执行得很好。链接中的帖子还建议,如果您选择将属性设置为true,请在dsn中指定编码类型。

相关问题