我正在使用Wordpress内部的WPDB对象与MySQL数据库进行通信。我的数据库有一个类型为bit(1)
的列,但是,Wordpress不会在我的生产服务器上将它们提取为0
或1
(它们在我的本地计算机上执行)。
问题:
如果我有来自Wordpress的数据库值,我无法与0
或1
进行简单比较:
if ($data[0]->Sold == 1) { //Always false
...
if ($data[0]->Sold == 0) { //Always false
如何检查0
的值是1
?
背景
这不是我本地机器上的问题,只是在生产中。
我像这样查询数据库:
$data = $wpdb->get_results("...");
当我对数据库的结果进行var_dump()
时,这是我的浏览器显示的输出:
array(1) {
[0] => object(stdClass)#261 (10) {
["SaleID"] => string(4) "1561"
["BookID"] => string(2) "45"
["MerchantID"] => string(1) "1"
["Upload"] => string(19) "2012-11-20 15:46:15"
["Sold"] => string(1) ""
["Price"] => string(1) "5"
["Condition"] => string(1) "5"
["Written"] => string(1) ""
["Comments"] => string(179) "<p>I am the first owner of this barely used book. There aren't any signs of normal wear and tear, not even any creases on the cover or any of its pages. It would pass for new.</p>"
["Expiring"] => string(19) "2013-05-20 15:46:15"
}
}
请注意Sold
和Written
如何显示字符串大小1
,但没有关联的值。这些值应分别填充1
和0
。
Chrome检查器工具显示了这些值非常有趣的内容:
什么是\u1
或\u0
,为什么他们不是1
或0
,所以我可以进行比较?
感谢您的时间。
答案 0 :(得分:1)
检查这个答案: https://stackoverflow.com/a/5323169/794897
“当您使用PHP从MySQL数据库中选择数据时,数据类型将始终转换为字符串。”
您可以这样做:
if ($data[0]->Sold === "1") {
...
if ($data[0]->Sold === "0") {
或输入变量,例如
$Sold = (int) $data[0]->Sold;
if ($Sold === 1) {
...
if ($Sold === 0) {
答案 1 :(得分:0)
对我来说,解决方案是使用ord功能:http://us1.php.net/manual/en/function.ord.php
修改强>
然而,行为似乎因服务器而异。在使用MariaDB 10.0.14的Arch Linux和使用MySQL的Ubuntu 5.5.37-0ubuntu0.13.10.1 wpdb 中返回旧的&#34; 0&#34;或&#34; 1&#34;字符串,而不是有问题的位串,发生在CentOS 6.4 MySQL 5.1.73
上