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


Php fetch returns string and not boolean "true/false" value

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

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

我的 php 获取如下:

$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在查看数据后更改它。

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

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

试试这个:

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;

你可以试试这个:

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