Home  >  Article  >  Backend Development  >  CodeIgniter 是不是支持PDO 查询?还是本来就不支持

CodeIgniter 是不是支持PDO 查询?还是本来就不支持

WBOY
WBOYOriginal
2016-06-13 12:11:001097browse

CodeIgniter 是否支持PDO 查询?还是本来就不支持?

本帖最后由 default7 于 2014-11-15 19:34:55 编辑 配置CodeIgniter 的database 连接方式为PDO 类型,但是怎么都查询不到数据,却可以查处有多少记录!

自带代码
仔细跟踪代码,发现有如下一句:

#文件 /system/database/drivers/pdo/pdo_driver.php<br />	function _execute($sql)<br />	{<br />		$sql = $this->_prep_query($sql);<br />		$result_id = $this->conn_id->prepare($sql);<br /><br />		if (is_object($result_id) && $result_id->execute())<br />		{<br />			if (is_numeric(stripos($sql, 'SELECT')))<br />			{<br />				$this->affect_rows = count($result_id->fetchAll());<br />			}<br />			else<br />			{<br />				$this->affect_rows = $result_id->rowCount();<br />			}<br />		}<br />		else<br />		{<br />			$this->affect_rows = 0;<br />			return FALSE;<br />		}<br /><br />		return $result_id;<br />	}




问题原因

$this->affect_rows = count($result_id->fetchAll());


这里的CI使用 $result_id->fetchAll() 来统计符合条件的个数,但是这个 fetchAll() 执行一次之后就不能再得到数据。所以导致后期就无法获得数据。


替代方法

<?php<br />//怎么都不会有结果,但是却会有条数<br />class User_model extends CI_Model {<br />    public function getList(){    <br />        $sql = "select * from #@__user ";<br />        return $this->db->query($sql)->result_array();<br />    }<br />}



//这样写就会有结果记录,但是默认的 $this->db->query($sql) .. 却又成摆设了!<br />class User_model extends CI_Model{<br />    public function getList(){<br />        $sql = "select * from ci_user";<br />        $stmt = $this->db->conn_id->prepare($sql);<br />        $stmt->execute();<br />        return $stmt->fetchAll();<br />    }<br />}




应该是不支持,但是官网下载的里面却带有PDO包。
想确认的是,codeigniter是否真的支持PDO?希望能够给个例子!

------解决思路----------------------
        if (is_object($result_id) && $result_id->execute())
{
if (is_numeric(stripos($sql, 'SELECT')))
{
$this->affect_rows = count($result_id->fetchAll());
$result_id->execute(); //再执行一次
}
else
{
$this->affect_rows = $result_id->rowCount();
}
}

虽然 rowCount 方法可能对某些数据库的 select 指令无效,但对于 mysql 的 select 指令还是有效的
所以把
                $this->affect_rows = count($result_id->fetchAll());
改为
                $this->affect_rows = $result_id->rowCount();
也是可以的
何况他对常见数据库都单独提供了操作类
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn