ホームページ > バックエンド開発 > PHPチュートリアル > CodeIgniter は PDO クエリをサポートしていますか?それともそもそもサポートされていないのでしょうか?

CodeIgniter は PDO クエリをサポートしていますか?それともそもそもサポートされていないのでしょうか?

WBOY
リリース: 2016-06-13 12:11:00
オリジナル
1147 人が閲覧しました

CodeIgniter は PDO クエリをサポートしていますか?それともそもそもサポートされていないのでしょうか?

この投稿はデフォルトで 7 に最終編集されました: 2014-11-15 19:34:55 CodeIgniter のデータベース接続メソッドを 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 を実行した後() を 1 回実行すると、これ以上データを取得できません。したがって、後からデータを取得することはできません。


代替案

<?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 />}
ログイン後にコピー




はサポートされていないはずですが、公式 Web サイトからのダウンロードには 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メソッドは、いくつかのデータベースの選択コマンドに対して有効ではありませんが、MySQL
の選択コマンドに対して有効です;affect_rows = $result_id->rowCount();
も可能です
共通のデータベースに個別の操作クラスを提供することは言うまでもありません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート