【发布时间】:2016-04-30 16:13:17
【问题描述】:
给定一个简单的查询
$query = 'INSERT INTO `menu` (`id`,`name`,`value`) VALUES (:id,:name,:value);';
和输入参数数组
$params = [':id' => '', ':name' => 'John', ':value' => 'ABC'];
其中id 是PRIMARY KEY 和AUTOINCREMENT 列。在 mysql 中,id 列会自动递增,即使传递的值为空字符串 '';这同样不适用于 sqlite,因为会引发错误
SQLSTATE[HY000]: General error: 20 datatype mismatch
问题:有没有办法强制sqlite在提供空字符串时增加主键字段?
docs的背景:
在 INSERT 中,如果 ROWID 或 INTEGER PRIMARY KEY 列没有显式指定值,那么它将自动填充一个未使用的整数,通常比当前使用的最大 ROWID 大一。
和
如果插入时没有指定 ROWID,或者指定的 ROWID 的值为 NULL,则会自动创建适当的 ROWID。
【问题讨论】:
-
$query = 'INSERT INTO menu ('name','value') VALUES (:name,:value);';和$params = [':name' => 'John', ':value' => 'ABC']; -
@A-2-A 是的,我知道这一点。我仍然想保留空字符串参数。
-
这是不可能的,因为它是
primary和auto-incremented列。primary键不接受空值。 -
''在执行数据库查询时将被视为 null。我想是的
标签: php mysql database sqlite pdo