【发布时间】:2022-12-12 16:26:27
【问题描述】:
对于我的数据库抽象,我想在准备好的语句中使用数据文字时完全依赖 PDO 参数标记,以消除转义和引用的需要。
问题是这似乎只适用于某些查询类型:明显的 SELECT、UPDATE 和 INSERT 查询按预期工作,但 CREATE TABLE 抛出“一般错误”,无论我使用命名标记还是问号标记。
<?php
// works:
(new PDO('sqlite::memory:'))->prepare('CREATE TABLE test (name TEXT DEFAULT \'unnamed\')')->execute();
// doesn't work:
(new PDO('sqlite::memory:'))->prepare('CREATE TABLE test (name TEXT DEFAULT ?)')->execute(['unnamed']);
这是错误:
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1 near "?": syntax error in /home/andy/projects/orm/public/pdo.php:7
Stack trace:
#0 /home/andy/projects/orm/public/pdo.php(7): PDO->prepare()
#1 {main}
thrown in /home/andy/projects/orm/public/pdo.php on line 7
【问题讨论】: