>  기사  >  백엔드 개발  >  php PDO实例化一次

php PDO实例化一次

WBOY
WBOY원래의
2016-06-20 12:38:551220검색

各位大神,下面是我写的一个连接类有些疑问,望解答

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() 的时候$db 应该在第一次的时候就实例化了,但是我debug发现$db还是为null, 又执行了一次new PDO,这是怎么回事


回复讨论(解决方案)

$db 都改成 self::$db

private static $db = null; 
这个不要改

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.