在将phinx引入数据库迁移工具之后,我不再能够通过PDO的execute语句使用 true 和 false 。每当我这样做时,都会出现以下错误:
PHP警告:PDOStatement :: execute():SQLSTATE [22007]:无效的日期时间格式:1366不正确的整数值:”列1的my_db'。'my_table'。'my_column'... >
我的表具有以下模式(简称):
| Field | Type | Null | Key | Default | Extra |
+-------------------------------+--------------+------+-----+---------+----------------+
| my_column | tinyint(1) | NO | | NULL | |
+-------------------------------+--------------+------+-----+---------+----------------+
我正在使用以下代码(简称):
$stmt = $this->pdo->prepare("INSERT INTO `$table` (`my_column`) VALUES (:mycolumn)");
$stmt->execute([
'my_column' => false
]);
该列由迁移脚本使用以下命令创建:
->addColumn('my_column', 'boolean', [
'null' => false,
'after' => 'another_column',
])
奇怪的是,我通过phpMyAdmin在手动sql语句中使用 true 和 false 没问题。
答案 0 :(得分:1)
您可以在PDO中使用PDO::PARAM_BOOL
$stmt->bindValue(':myColumn', false, PDO::PARAM_BOOL);
答案 1 :(得分:-1)
您的字段类型为tinyint(1)。因此它仅支持0-9的值。更改为varchar,text,char等以接受true / false字符串。 但我强烈建议您使用bool数据类型。然后使用0或1作为true或false。为布尔操作编写字符串(真/假)值没有意义。使用0或1可以避免将来遇到很多麻烦。
答案 2 :(得分:-1)
该问题的一种解决方案是全局设置sql_mode = ''
。
在您的数据库中运行此查询,并检查是否解决了该问题:
set GLOBAL sql_mode = "";
您可以在Server SQL Modes上阅读
P.S。您必须在每次重新启动mysql服务器时运行该查询。为了克服这个问题,您必须在mysql config中进行设置,如果需要,可以对其进行查找。