gpt4 book ai didi

php - MySQL INSERT 将 BIT 插入到 1 而不是 0

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:44 25 4
gpt4 key购买 nike

我有以下查询,它应该插入 0 而不是插入 1。它在 PHP 中使用准备好的语句执行:

$insertsql= 
"INSERT INTO table1 (column1, column2, column3, column4, column5, column6)
VALUES (?, ?, ?, ?, ?, ?)";
$insertstmt = $pdo->prepare($insertsql);
$insertstmt->execute(array($var1, $var2, $var3, $var4, $var5, 0));

除了在 column6 中插入 1 而不是 0 之外,所有插入都执行得很好。第 6 列的数据类型为 BIT。

查询工作正常,但是,执行时

INSERT INTO table1 (column6) VALUE (0);

直接在 phpmyadmin 的“MySQL”选项卡中。

我错过了什么?

编辑:使用

$insertstmt->execute(array($var1, $var2, $var3, $var4, $var5, false));

按预期工作。为什么 0 直接在 SQL 查询中工作,而不是在使用 pdo 执行它时?

最佳答案

传递给 PDO 时需要显式声明此参数为 bool 值。

来自 the PDO execute documentation :

input_parameters

An array of values with as many elements as there are bound parameters in the SQL statement being executed. All values are treated as PDO::PARAM_STR.

这不是你想要的。

因此您需要更改逻辑以避免使用 execute(array()) 构造并使用 bindValue() 单独绑定(bind)每个参数。对于 bool 值:

$insertstmt->bindValue(':col6', false, PDO::PARAM_BOOL);

因为 bool 值在 MySQL 中只是 TINYINT(1)PDO::PARAM_INT 也应该可以正常工作:

$insertstmt->bindValue(':col6', 0, PDO::PARAM_INT);

最后:如果这个 bool 值总是假的,那么你可以直接将它传递给查询,比如:

$insertstmt->execute(array($var1, $var2, $var3, $var4, $var5, false));

正如 spencer7593 明智地评论的那样,另一种选择是从 SQL 中进行类型转换。例如,可以将字符串转换为位值:

INSERT INTO table1 (column1, column2, column3, column4, column5, column6) 
VALUES (?, ?, ?, ?, ?, IF( ? ='0', b'0', b'1') )

关于php - MySQL INSERT 将 BIT 插入到 1 而不是 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com