sqlite 是否可以在CREATE TABLE语句中使用PDO参数标记作为DEFAULT值?

jjjwad0x  于 2022-12-13  发布在  SQLite
关注(0)|答案(1)|浏览(149)

对于我的数据库抽象,当在预处理语句中使用数据文字时,我希望完全依赖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

Can PHP PDO Statements accept the table or column name as parameter?的重要区别在于,我并不试图参数化标识符,而是一个文字。
如果参数不能在DDL中使用,有人能告诉我一些文档或规范吗?

sirbozc5

sirbozc51#

根据clarification,查询参数(QP)不能用来代替任何文字值。特别是,虽然SQLite图目前指出QP可以在DEFAULT子句中使用,但专用部分明确禁止它。

相关问题