【问题标题】:How to insert boolean value "false" as 0 with DB insert?如何使用 DB 插入将布尔值“false”插入为 0?
【发布时间】:2018-12-07 06:14:59
【问题描述】:

我从 API 请求接收数据,其中包含值“true”或“false”。

在我使用 PDO::PARAM_BOOL 绑定值并将其插入 MySQL 之前

现在我正在使用 Laravel,我想知道如何将此值插入为布尔值 1 或 0。

我创建了一个包含

的迁移
$table->boolean('businessorder');  

我将数据保存在一个数组中并将其插入到我的表中:

$orderarray = [];

  foreach($csv as $data => $orderdata){
    $orderarray[] = [
    ...
    'businessorder' => $orderdata['is-business-order'],
    ...
    ];

  }

我收到以下错误

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'false' for column 1  

错误消息还将要插入数据库的数据显示为“false”而不是 0。

我如何确保它会插入 0 或 1 而不是 true 或 false

当我这样做时

'businessorder' => (bool)$orderdata['is-business-order'],  

它会将所有内容设置为 1(因为 (bool)'false' 为真)

【问题讨论】:

  • 您可以添加一个简单的检查,例如:$orderdata['is-business-order'] == 'true' ? 1 : 0

标签: php mysql laravel insert boolean


【解决方案1】:

当您尝试将 $orderdata['is-business-order'] 的值放入 DB 列时,MySQL 会尝试放入 truefalse

truefalse 不能存储在布尔类型列中。所以我们可以执行类似下面的代码来获取10 而不是truefalse

'businessorder' => ($orderdata['is-business-order']=='true'?1:0)

【讨论】:

  • Kajan- 你必须在这里添加一些内容来解释你的代码。
  • @staypuftman 抱歉。我更新了它。谢谢推荐
【解决方案2】:

根据this post,您可以这样做:

'businessorder' => filter_var($orderdata['is-business-order'], FILTER_VALIDATE_BOOLEAN),

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 2011-11-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多