gpt4 book ai didi

php - MySQL bool 类型

转载 作者:可可西里 更新时间:2023-11-01 07:40:25 25 4
gpt4 key购买 nike

我真的很纠结如何处理这个。在过去的 10 年里,我一直忍受着这个问题,但我认为是时候决定处理这个问题的正确方法了。

根据 Internet,MySQL 不支持 native 数据类型,这就是为什么每当我选择“BOOLEAN”时,我都会看到该列最终为 tinyint(1)。

将数据存储为具有 1 或 0 值的 tinyint 没有问题,但是我确实有一个问题,当我从数据库中使用此列选择许多行时,我得到一个字符串“1”或“0"而不是 PHP native bool true/false。 PHP 仍然可以将此变量作为 bool 值处理,因为它似乎自动知道每当我执行 == 0 或 == 1 或什至 == '0' 或 == '1' 时我想要它做什么,如果我真的感觉可以了。

所以,我开始,获取这些数据并将其运行到 PHP 的 json_encode 函数中,并在我的 Backbone/Handlebars 实现进行 ajax 调用时输出它,并获得一个漂亮的 JSON 对象(通常使用许多行的数据)与此:{"myVariable":"1"} 或此 {"myVariable":"0"}

我相信您会看到想要在 Handlebars.js 中做这样的事情的问题:

{{#if myVariable}} 
Do this
{{else}}
Do that
{{/if}}

现在,我真正不想做的是这样的事情:

<?php
for($i = 0; $i < count($recordSet); $i++) {
$recordSet[$i]['myVariable'] = (bool)$recordSet[$i]['myVariable'];
}
?>

因为我正在构建的应用程序在数据库中有数千列,所以我不能(或者只需要)为我想要的每一列运行上面的代码,就像我的 javascript 中的 bool 一样。我真的不想这样做(尽管这可能是最简单的)

Handlebars.registerHelper('ifTrue', function(a, b) {
// Cast the compared value to a bool and then run a regular handlebars #if statement
});

有没有更好的方法?我正在使用代码点火器...是否可以通过某种方式修改数据库类以检测 tinyint(1) 列并自动将其转换为 bool 值,然后一直执行此操作直到 MySQL 支持真正的 bool 值列?我知道他们正在计划,但是......

最佳答案

请记住,默认情况下,PHP/MySQL 驱动程序返回的列值只是字符串(即无类型的字节数组)。这个简短的片段演示了这一点:

// mysqli driver
$c = mysqli_connect ($host, $user, $pass, $dbname);
$r = mysqli_query($c, 'SELECT * FROM foo');
$f = mysqli_fetch_array($r);
foreach ($f as $k => $v) {
echo "$k => $v [" . gettype($v) . ']' . PHP_EOL;
}

// PDO
$c = new PDO("mysql:dbname=$dbname;host=$host", $user, $pass);
$r = $c->query('SELECT * FROM foo');
$f = $r->fetch();
foreach ($f as $k => $v) {
echo "$k => $v [" . gettype($v) . ']' . PHP_EOL;
}

“默认”,因为可以为驱动程序提供一个映射,以便它可以将这些字符串转换为 native PHP 类型。为此,mysqlimysqli_result::fetch_object() , PDOPDOStatement::fetchObject() .

虽然可以从其元数据或什至从表定义中检索实际的列类型,但在典型情况下,客户端应用程序会提前知道。

底线是:您确实想要这样做(或类似的事情):

$recordSet[$i]['myBoolColumn'] = (bool)$recordSet[$i]['myBoolColumn'];

...因为事实上你也应该这样做:

$recordSet[$i]['myIntColumn'] = (int)$recordSet[$i]['myIntColumn'];

但是 PHP 在输入方面非常宽松,毕竟我不会太担心这一点。

关于php - MySQL bool 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021373/

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