【发布时间】:2025-12-16 15:05:02
【问题描述】:
我正在尝试在 innoDB 中创建序列替换(因为 auto_increment 的行为与 myisam 中的不同)。所以我创建了一个名为 seq 的存储函数。我可以按如下方式使用它:
INSERT INTO a_table(id) VALUES(seq('seq_a_table'));
我的基于 mysqli 的数据库库自动使用准备好的语句,所以我得到这个错误:
This command is not supported in the prepared statement protocol yet
MySQL 版本:5.1.48(OSX 雪豹)。
更新
哇,我觉得自己很愚蠢……我被这个错误弄糊涂了,以至于我错过了一个简单的事实,即它不是由相关语句抛出的。我正在使用事务并忘记了我的查询功能会自动将所有内容编译为语句,包括“START TRANSACTION”。 所以对于未来的深夜编码员 - 不要试图在语句中开始交易:)
【问题讨论】:
-
拥有它们到底有什么意义?它们在最常见的情况下工作,这不是一件好事吗?
-
您能否展示一下您是如何尝试使用准备好的语句的?
-
@Barmar 说得像个真正的乐观主义者 :) 我只是厌倦了试图克服一个问题,却又用这个愚蠢的数据库引擎面对另一个问题。我已经更新了我的答案,以向您展示我的库是如何工作的,但您可能不会在那里找到任何令人兴奋的东西。
-
$q的值是多少?我想看看您是如何尝试使用参数化查询调用存储过程的。 -
这不是乐观,只是事实的陈述:大多数 SQL 应用程序都可以利用准备好的语句。无法使用的情况有很多,这就是其中之一。
标签: php mysql stored-procedures innodb