PDO插入不接受“ true”或“ false”,但仅接受0和1

时间:2019-06-11 08:26:29

标签: php mysql pdo phinx

在将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 没问题。

3 个答案:

答案 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中进行设置,如果需要,可以对其进行查找。