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

WBOY
Freigeben: 2016-06-13 12:11:00
Original
1139 Leute haben es durchsucht

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 />	}
Nach dem Login kopieren




问题原因

$this->affect_rows = count($result_id->fetchAll());
Nach dem Login kopieren


这里的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 />}
Nach dem Login kopieren



//这样写就会有结果记录,但是默认的 $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 />}
Nach dem Login kopieren




应该是不支持,但是官网下载的里面却带有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();
}
}
Nach dem Login kopieren

虽然 rowCount 方法可能对某些数据库的 select 指令无效,但对于 mysql 的 select 指令还是有效的
所以把
                $this->affect_rows = count($result_id->fetchAll());
改为
                $this->affect_rows = $result_id->rowCount();
也是可以的
何况他对常见数据库都单独提供了操作类
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage