ホームページ > バックエンド開発 > PHPチュートリアル > php PDOが一度インスタンス化されました

php PDOが一度インスタンス化されました

WBOY
リリース: 2016-06-20 12:38:55
オリジナル
1253 人が閲覧しました

親愛なるマスターの皆様、私が書いた接続クラスに関するいくつかの質問がありますので、お答えいただければ幸いです。

class DbOperator{	private static $db = null;		public static function getInstance()	{		try 		{			if($db == null)			{				$db = new PDO("mysql:host=".localhost.";dbname=".test,root,root, array(PDO::ATTR_PERSISTENT => true));									$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);								}			return $db;		}		catch (Exception $e)		{			die("数据库连接失败!".$e->getMessage());		}			}   		function __destruct ()	{		$db = null;	}		/**	 * 次函数主要是以集合的形式返回,或插入集合数据。	 * @param unknown $strSql	 * @param unknown $array	 */    public static function executeArraySql($strSql, $array)    {        try         {        	DbOperator::getInstance()->beginTransaction();        	            $stms = DbOperator::getInstance()->prepare($strSql);                        foreach ($array as $value)            {                $stms->execute($value);            }                        DbOperator::getInstance()->commit();                    }catch (PDOException $e)        {            print "Error: " . $e->getMessage() . "<br/>";            die();        }            }    /**     * 次函数主要是用来指定条件查询     * @param unknown $strSql     * @param unknown $array 查询参数     */    public static function executeSql($strSql,$array)    {        try        {            $stms = DbOperator::getInstance()->prepare($strSql);                        $bRet = $stms->execute($array);                                    return $bRet;                }catch (PDOException $e)        {            print "Error: " . $e->getMessage() . "<br/>";            die();        }    }}
ログイン後にコピー


最初にメソッド呼び出し DbOperator::getInstance(), $ を実行するとき。 db は null で、条件 new PDO を満たします。
しかし、DbOperator::getInstance() を 2 回目に呼び出したとき、$db は最初にインスタンス化されているはずですが、デバッグしたところ、$db がまだ null であることがわかりました。新しい PDO が再度実行されました。何が起こりましたか?

ディスカッションへの返信 (解決策)

$db を self::$db に変更します

private static $db = null

これは変更しないでください

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