찾다
php教程php手册在构造方法中使用静态属性保留的PDO资源句柄在其他方法中无法调

在构造方法中使用静态属性保存的PDO资源句柄在其他方法中无法调用??? ?php classDB{ protected$link='127.0.0.1'; protected$dbname='think'; staticpublic$DB; privatefunction__construct(){ try{ self::$DB=newPDO("mysql:host={$this-link};dbname={$t

在构造方法中使用静态属性保存的PDO资源句柄在其他方法中无法调用???
<?php<br />
<br />
class DB{<br />
    protected $link = '127.0.0.1';<br />
    protected $dbname = 'think';<br />
    static public $DB;<br />
    private function __construct(){<br />
        try{<br />
            self::$DB = new PDO("mysql:host={$this->link};dbname={$this->dbname}",'root','root');<br />
        }catch (PDOException $e){<br />
            die("连接出错:".$e->getMessage());<br />
        }<br />
<br />
        $sql = ' SELECT * FROM user WHERE id=? and username=? and email=? ';<br />
        $stmt = self::$DB->prepare($sql);<br />
        $stmt->execute([0=>'13',1=>'12',2=>'12']);<br />
        echo '<pre class="brush:php;toolbar:false">';<br />
        print_r($stmt->fetchAll(PDO::FETCH_ASSOC));<br />
        echo $stmt->rowCount();<br />
    }<br />
    //静态方法,单例统一访问入口<br />
    static public function getInstance() {<br />
        if (is_null ( self::$DB ) || isset ( self::$DB )) {<br />
            self::$DB = new self ();<br />
        }<br />
        return self::$DB;<br />
    }<br />
    public function Test(){<br />
         $sql = ' SELECT * FROM user WHERE id=? and【本文来自鸿网互联 (http://www.68idc.cn)】 username=? and email=? ';<br />
         $stmt = self::$DB->prepare($sql);<br />
         $stmt->execute([0=>'13',1=>'12',2=>'12']);<br />
         echo '<pre class="brush:php;toolbar:false">';<br />
         print_r($stmt->fetchAll(PDO::FETCH_ASSOC));<br />
         echo $stmt->rowCount();<br />
    }<br />
}<br />
$db = DB::getInstance();<br />
$db->Test();

我把Test方法复制在构造方法没有问题,为什么在Test方法中会出现Call to undefined method DB::prepare()???
求各位大神了
------解决思路----------------------
你至少应写作
class DB{<br />
    protected $link = '127.0.0.1';<br />
    protected $dbname = 'think';<br />
    static public $DB;<br />
    static public $_DB;<br />
    private function __construct(){<br />
        try{<br />
            self::$_DB = new PDO("mysql:host={$this->link};dbname={$this->dbname}",'root','root');<br />
        }catch (PDOException $e){<br />
            die("连接出错:".$e->getMessage());<br />
        }<br />
    }<br />
    //静态方法,单例统一访问入口<br />
    static public function getInstance() {<br />
        if (is_null ( self::$DB ) <br><font color='#FF8000'>------解决思路----------------------</font><br> isset ( self::$DB )) {<br />
            self::$DB = new self ();<br />
        }<br />
        return self::$DB;<br />
    }<br />
    public function Test(){<br />
         $sql = ' SELECT * FROM user WHERE id=? and username=? and email=? ';<br />
         $stmt = self::$_DB->prepare($sql);<br />
         $stmt->execute([0=>'13',1=>'12',2=>'12']);<br />
         echo '<pre class="brush:php;toolbar:false">';<br />
         print_r($stmt->fetchAll(PDO::FETCH_ASSOC));<br />
         echo $stmt->rowCount();<br />
    }<br />
}<br />
$db = DB::getInstance();<br />
$db->Test();
PDO 本身已经封装的很好了,如确需要进一步封装以简化调用代码
那么应该从 PDO 继承一个 DB 类,如
class DB extends PDO {<br />
  private static $_Instance;<br />
  function __construct() {<br />
	$options = array(<br />
		PDO::MYSQL_ATTR_INIT_COMMAND => "set names gbk",<br />
		PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,<br />
		PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,<br />
		);<br />
<br />
    parent::__construct('mysql:dbname=test', 'root', '', $options);<br />
  }<br />
  //执行各种 sql 指令,并可通过参数 $param 进行扩展<br />
  function query($sql, $param=null) {<br />
	$res = [];<br />
	try {<br />
		$rs = parent::query($sql);<br />
		do {<br />
			if($t = $rs->fetchall()) $res[] = $t;<br />
		}while($rs->nextRowset());<br />
		return $res;<br />
	} catch (PDOException $e) {<br />
		die( "Error!: " . $e->getMessage() . "\n" );<br />
		//  die();<br />
	}<br />
  }<br />
  //查询并返回单条记录<br />
  static function fetch($sql) {<br />
	if(! self::$_Instance) self::$_Instance = new self;<br />
	return self::$_Instance->query($sql)[0][0];//->fetch();<br />
  }<br />
  //查询并以数组方式返回多条记录<br />
  static function fetchall($sql) {<br />
	if(! self::$_Instance) self::$_Instance = new self;<br />
	$res = self::$_Instance->query($sql);//->fetchall();<br />
	if(count($res) == 1) return current($res);<br />
  }<br />
}<br />
这样你就有机会这样使用了
$r = DB::fetch("select * from user where name='my'");
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)