Wordpress 数据库类 - MySQL 类型位

Posted

技术标签:

【中文标题】Wordpress 数据库类 - MySQL 类型位【英文标题】:Wordpress Database Class - MySQL Type Bit 【发布时间】:2013-09-05 06:34:20 【问题描述】:

我正在使用 Wordpress 中的 WPDB 对象与 mysql 数据库进行通信。我的数据库有一个类型为 bit(1) 的列,但是,Wordpress 不会在我的生产服务器上将它们提取为 01(它们是在我的本地计算机上提取的)。


问题:

如果我有来自 Wordpress 的数据库值,我无法与 01 进行简单比较:

if ($data[0]->Sold == 1)  //Always false
...
if ($data[0]->Sold == 0)  //Always false

如何检查该值是否为10


背景:

这在我的本地机器上不是问题,而只是在生产中。

我这样查询数据库:

$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"
  

注意SoldWritten 如何显示1 的字符串大小,但没有关联的值。这些值应分别用10 填充。

Chrome 检查器工具对这些值显示了一些非常有趣的东西:

\u1\u0 是什么,为什么不是简单的 10,所以我可以比较一下?

感谢您的宝贵时间。

【问题讨论】:

听起来好像没有在 mySQL 数据库中设置这些值。尝试更新 mySQL 中的行。 @fredrik 我曾提到:“这些值应分别填充 10。” 好吧 \u1\u0 是内容,不幸的是控制字符的 unicode 表示。也许您可以尝试将它们转换为整数。 那么我猜你已经以编程方式添加了一个 1 或 0 字符,而不是包含 1 或 0 的字符串。这将解释 \u0\u1。含义:您在行中放置了01,而不是"0""1"。大不同。 @fredrik 这确实可能是原因。 [at]spryno724 另见 MySQL 文档:»To specify bit values, b'value' notation can be used. value is a binary value written using zeros and ones. For example, b'111' and b'10000000' represent 7 and 128, respectively.« 【参考方案1】:

看看这个答案: https://***.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)  

【讨论】:

【参考方案2】:

对我来说,解决方案是使用 ord 函数:http://us1.php.net/manual/en/function.ord.php

编辑

然而,行为似乎因服务器而异。在带有 MariaDB 10.0.14 的 Arch Linux 和带有 MySQL 5.5.37-0ubuntu0.13.10.1 的 Ubuntu 上 wpdb 返回良好的旧“0”或“1”字符串,而不是有问题的位字符串,这会发生在 CentOS 6.4 MySQL 5.1.73 上

【讨论】:

以上是关于Wordpress 数据库类 - MySQL 类型位的主要内容,如果未能解决你的问题,请参考以下文章

如何在 wordpress 中以编程方式显示自定义帖子类型的图像缩略图。?

MySQL索引类型

wordpress固定链接的固定链接的类型

mysql索引总结----mysql 索引类型以及创建

检查 mysql 数据库中的 Wordpress 版本

如何使用 WordPress 进行自定义查询?