Php fetch 返回字符串而不是布尔“真/假”值

Posted

技术标签:

【中文标题】Php fetch 返回字符串而不是布尔“真/假”值【英文标题】:Php fetch returns string and not boolean "true/false" value 【发布时间】:2012-04-30 08:23:13 【问题描述】:

我正在使用完整的日历,并且我有一些全天活动。一般来说,我的 php 都设置了'allDay' => 'false'。现在我注意到如果我不指定时间,它会添加一个时间。

我想将所有值的所有默认值设置为 false,除非我将它们指定为 true。

我的php fetch如下:

$sql = "SELECT `id`, `title`, `time`, `start`, `end`, `url`, `backgroundColor`, `textColor`, `className`,
   `allDay` FROM calender WHERE length('column') > '0'";

$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $row)
    $return[]=array('id'=>$row['id'],
                'title'=>$row['title'],
                "allDay" =>$row['allDay'],
                'start'=>$row['start'].' '.$row['time'],
                'end'=>$row['end'],
                'url'=>$row['url'],
                'backgroundColor'=>$row['backgroundColor'],
                'textColor'=>$row['textColor'],
                'className' =>$row['className']);

$dbh = null;

header('Content-type: application/json');
echo json_encode($return);

而jQuery函数是:

$(document).ready(function() 
    $('#calendar').fullCalendar(
    editable: false,
    events: "json-events.php", 
    eventDrop: function(event, delta) 
            alert(event.title + ' was moved ' + delta + ' days\n' +
                '(You cannot update these fields!)');
        ,
        loading: function(bool) 
            if (bool) $('#loading').show();
            else $('#loading').hide();
        ,
    );
);

我不知道在哪里添加值。我让 mysql 将“allDay”存储为真/假,但它以字符串形式返回。所以我实际上知道如何在 json 对文件进行编码之前对其进行隐藏。或者在查看数据后让 jQuery/javascript 更改它。

【问题讨论】:

为什么数组中有两次allDay?此外,你到处混用单引号和双引号,这不是一个好习惯.. 这很有趣,我试图修复它,但实际上从未返回并删除了最后一个。 您使用什么列类型来存储真/假值? @liquorvicar tinyint。我读到将值存储为布尔值而不是字符串。 【参考方案1】:

MySQL 中的 allDay 字段是什么类型的?如果是enum('true', 'false'),那可能是你的问题。这将转换为字符串。我曾经有人这样做过,我花了很长时间才弄清楚为什么我认为布尔(或 int)是字符串。

仔细检查您的数据库并尝试将其设为tinyint(1),并使用 0 表示错误,使用 1 表示正确。 PHP 的布尔值 true 和 false 将被转换为相应的整数,在 JavaScript 中使用 0/1 不会有问题。

【讨论】:

如果我这样做了,那么我需要编辑我的 javascript 来说明它的字符串是否保持原样以及它的真/假是否返回值? 如果操作正确,您应该能够将其评估为真或假。尝试在 PHP 中的 json_encode 之前执行 var_dump on return 以列出数组的所有类型和值,这样我们就可以确定 allDay 是什么类型。 var_dump 说 ["allDay"]=> string(1) "1" 不一样...好吧,试试 "allDay" => intval($row['allDay']) 或 "allDay" => $row['allDay'] == "1"。前者会将 string(1) "1" 转换为 int(1) ,这将评估为真。 非常好的工作。有效。我再测试一下看看。【参考方案2】:

试试这个:

foreach ($result as $row)
    $return[]=array('id'=>$row['id'],
                'title'=>$row['title'],
                "allDay" =>$row['allDay'] == "true",
                'start'=>$row['start'].' '.$row['time'],
                'end'=>$row['end'],
                'url'=>$row['url'],
                'backgroundColor'=>$row['backgroundColor'],
                'textColor'=>$row['textColor'],
                'className' =>$row['className']);

$dbh = null;

【讨论】:

它实际上给了我正确的值,但仍然显示为字符串。【参考方案3】:

你也可以试试这个:

$sql = "SELECT `id`, `title`, `time`, `start`, `end`, `url`, `backgroundColor`, `textColor`, `className`, IF(`allDay` = 'true',true,false) AS allDay  FROM calender WHERE length('column') > '0'";

【讨论】:

以上是关于Php fetch 返回字符串而不是布尔“真/假”值的主要内容,如果未能解决你的问题,请参考以下文章

如何读取数组中所有函数的布尔值(真/假)

在 postgresql 查询中检查布尔真/假结果

如何以0/1而不是真/假反应形式获取复选框的值angular4

JPQL 语句返回布尔值

Ruby:如何将字符串转换为布尔值

从角度表单复选框保存布尔真/假并将其保存到 Oracle 等后端数据库的正确方法是啥? [关闭]