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 返回字符串而不是布尔“真/假”值的主要内容,如果未能解决你的问题,请参考以下文章