2

引入phinx作为数据库迁移工具后,我再也无法通过PDO的execute语句来使用真假了。每当我这样做时,我都会收到以下错误:

PHP 警告:PDOStatement::execute(): SQLSTATE[22007]:无效的日期时间格式:1366 不正确的整数值:'' 列 'my_db'.'my_table'.'my_column' 在第 1 行...

我的表具有以下架构(短路):

| 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 语句中使用truefalse没有问题。

4

4 回答 4

2

您可以PDO::PARAM_BOOLPDO中使用

$stmt->bindValue(':myColumn', false, PDO::PARAM_BOOL);
于 2019-06-11T08:38:20.357 回答
0

当我使用macOS时,这发生在我身上,

我正在从Windows 10构建我的网站,并且工作正常。使用macOS后,我必须将变量更改为10

我希望你修好它。

于 2021-09-13T13:37:58.443 回答
-1

解决该问题的方法是sql_mode = ''全局设置。

在您的数据库中运行此查询并检查它是否解决了问题:

set GLOBAL sql_mode = "";

您可以在此处阅读服务器 SQL 模式

PS每次重新启动mysql服务器时都必须运行该查询。为了克服这个问题,您必须在 mysql 配置中设置它,如果需要,您可以查找它。

于 2019-06-11T08:35:06.097 回答
-2

您的字段类型是 tinyint(1)。所以它只支持 0-9 的值。更改为 varchar、text、char 等以接受真/假字符串。但我强烈建议您使用 bool 数据类型。然后使用 0 或 1 作为真或假。为布尔运算编写字符串(真/假)值是没有意义的。使用 0 或 1 将使您免于将来的许多麻烦。

于 2019-06-11T08:34:31.463 回答