Zend_Db_Table 选择缺失数据,直接PHP查询ok

Posted

技术标签:

【中文标题】Zend_Db_Table 选择缺失数据,直接PHP查询ok【英文标题】:Zend_Db_Table Select missing data, straight PHP query ok 【发布时间】:2012-04-28 07:22:44 【问题描述】:

我正在将一个 php 应用程序转换为 zend 框架并利用 Zend_Db_Table 进行查询。 我的问题是,在转换为 zend 格式后,我对文本格式字段的预期结果返回一个空字符串,而不是存储的数据。

文本字段长度为 11000 的记录总是返回空,但是另一个长度为 2500 的记录总是正确返回。

有什么我需要配置的吗?使用zend db表返回的数据有限制吗?

PHP mysql 使用 mysqli,返回 true,var 有值

$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$stmt= "select * from m_message where m.m_id='".$m_id."'";
$result = $db->query($q_message);

$result['m_content'] 等于“我得到了...的副本”(11000 个字符/长度)

Zend 使用 pdo_mysql,返回 true,var 没有值

$this->_db = Zend_Db_Table::getDefaultAdapter();
$stmt = $this->_db->query('SELECT m_content FROM m_message WHERE m_id = ? ', $messageId);
$result = $stmt->fetchAll();

$result['m_content'] 等于(字符串)

$this->_db = Zend_Db_Table::getDefaultAdapter(); 
$stmt = $this->_db->select()->from('m_message', 'm_content')->where('m_id = ?',$messageId );
$result = $this->_db->fetchAll($stmt);

$result['m_content'] 等于(字符串)

更新

原来在 Netbeans 中调试时观察变量时显示为 null。 正如预期的那样,变量的 var_dump 实际上显示了数据。 问题是当我使用 JSON 助手将数组作为 json 返回时。 查看 json_last_error() 时,返回 5,JSON_ERROR_UTF8。

我的 DB 字符集是 UTF-8,但是为了解决这个问题,我必须先执行 utf8_encode($result['m_content']),然后再将其传递给 json 助手:/

【问题讨论】:

Zend_Db_Adapter_Pdo_Mysql::fetchAll() 返回结果数组。尝试$result[0]['m_content'] 中的var_dump,看看它是否包含您要查找的所有数据(假设$result 没有返回false)。 如果我更改为选择 *,var_dump 会显示除 m_content 之外的所有字段的值。以上,每条语句都返回true。 好吧,很奇怪,我不确定发生了什么,我在 ZF 中没有遇到这样的限制,我使用 Zend_Db_Select 从列中提取了兆字节大小范围内的文本和数据。您使用的是目前最新的 ZF 1.11.11 版本吗? 可能不是 ZF 问题,可能是使用 mysqli 和 PDO_mysql 的区别。您是否尝试过使用“Mysqli”适配器? 我试试mysqli适配器看看。 SELECT * from above 显示除 m_content 文本字段之外的所有字段。 【参考方案1】:

对于您的最后一次更新,试试这个,这样您的连接实际上是 UTF-8。

$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$this->_db->query("SET NAMES 'utf8'");

【讨论】:

以上是关于Zend_Db_Table 选择缺失数据,直接PHP查询ok的主要内容,如果未能解决你的问题,请参考以下文章

在 Zend Framework 中使用 Zend_Db_Table 的 CakePHP 风格的数据库查询结果?

罕见病数据库构建与应用专栏|不同类型“脏数据”的清洗方式

53-R语言中缺失值处理方法

数据清洗要点

pandas(12):数据清洗(缺失值)

Ph.DEd.D和DBA博士学位如何进行选择?