찾다
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으로 문의하세요.
演示win7调整屏幕亮度的方法演示win7调整屏幕亮度的方法Jul 08, 2023 pm 07:49 PM

不同的电脑系统在调整屏幕亮度的操作方法上会有些不同,最近就有使用win7系统的网友不知道win7怎么调整屏幕亮度,看久了电脑眼睛比较酸痛。下面小编就教下大家win7调整屏幕亮度的方法。具体的操作步骤如下:1、点击win7电脑左下角的“开始”,在弹出的开始菜单中选择“控制面板”打开。2、在打开的控制面板中找到“电源选项”打开。3、也可以用鼠标右键电脑右下角的电源图标,在弹出的菜单中,点击“调整屏幕亮度”,如下图所示。两种方法都可以用。4、在打开的电源选项窗口的最下面可以看到屏幕亮度调整的滚动条,直

win10监控摄像头打开照片的方法win10监控摄像头打开照片的方法Jul 10, 2023 pm 09:41 PM

如果我们手头没有手机,只有电脑,但我们必须拍照,我们可以使用电脑内置的监控摄像头拍照,那么如何打开win10监控摄像头,事实上,我们只需要下载一个相机应用程序。打开win10监控摄像头的具体方法。win10监控摄像头打开照片的方法:1.首先,盘快捷键Win+i打开设置。2.打开后,进入个人隐私设置。3.然后在相机手机权限下打开访问限制。4.打开后,您只需打开相机应用软件。(如果没有,可以去微软店下载一个)5.打开后,如果计算机内置监控摄像头或组装了外部监控摄像头,则可以拍照。(因为人们没有安装摄

基于Java的机器视觉实践和方法介绍基于Java的机器视觉实践和方法介绍Jun 18, 2023 am 11:21 AM

随着科技的不断发展,机器视觉技术在各个领域得到了广泛应用,如工业自动化、医疗诊断、安防监控等。Java作为一种流行的编程语言,其在机器视觉领域也有着重要的应用。本文将介绍基于Java的机器视觉实践和相关方法。一、Java在机器视觉中的应用Java作为一种跨平台的编程语言,具有跨操作系统、易于维护、高度可扩展等优点,对于机器视觉的应用具有一定的优越性。Java

win7怎么调屏幕亮度的两种简单方法win7怎么调屏幕亮度的两种简单方法Jul 08, 2023 pm 06:33 PM

目前有很多屏幕亮度调整软件,我们可以通过使用软件进行快速调整或者通过显示器上自带的亮度功能进行调整。以下是详细的Win7屏幕亮度调整方式,您可以通过教程中的方法进行快速调整即可。Win7系统电脑怎么调节屏幕亮度教程:1、依次点击“计算机—右键—控制面板”,如果没有也可以在搜索框中进行搜索。2、点击控制面板下的“硬件和声音”,或者点击“外观和个性化”都可以。3、点击“NVIDIA控制面板”,有些显卡可能是AMD或者Intel的,请根据实际情况选择。4、调节图示中亮度滑块即可。5、还有一种方法,就是

Go 语言中的方法是怎样定义和使用的?Go 语言中的方法是怎样定义和使用的?Jun 10, 2023 am 08:16 AM

Go语言是近年来备受青睐的编程语言,因其简洁、高效、并发等特点而备受开发者喜爱。其中,方法(Method)也是Go语言中非常重要的概念。接下来,本文就将详细介绍Go语言中方法的定义和使用。一、方法的定义Go语言中的方法是带有接收器(Receiver)的函数,它是一个与某个类型绑定的函数。接收器可以是值类型或者指针类型。用于接收者的参数可以在方法名

图文详解如何下载win10系统方法图文详解如何下载win10系统方法Jul 16, 2023 pm 01:25 PM

如今微软的Windows系统已经更新换代到了Windows10版本。很多以前还在使用Windows7系统的用户都想体验这个新版本Windows10系统。下面小编就来说说如何下载win10系统下载的方法,大家快来看看。1、首先下载一个小白重装系统软件,然后点击在线重装,下载win10系统。2、然后就开始系统镜像的下载了。3、系统镜像下载完成就是环境部署了。然后win10系统就下载完成啦。4、重启之后开始安装系统,安装完成就能进入桌面咯。以上就是如何下载win10系统的方法介绍啦,希望能帮助到大家。

PHP文件下载方法及常见问题解答PHP文件下载方法及常见问题解答Jun 09, 2023 pm 12:37 PM

PHP是一个广泛使用的服务器端编程语言,它的许多功能和特性可以将其用于各种任务,包括文件下载。在本文中,我们将了解如何使用PHP创建文件下载脚本,并解决文件下载过程中可能出现的常见问题。一、文件下载方法要在PHP中下载文件,我们需要创建一个PHP脚本。让我们看一下如何实现这一点。创建下载文件的链接通过HTML或PHP在页面上创建一个链接,让用户能够下载文件。

使用PHP数组实现数据缓存和存储的方法和技巧使用PHP数组实现数据缓存和存储的方法和技巧Jul 16, 2023 pm 02:33 PM

使用PHP数组实现数据缓存和存储的方法和技巧随着互联网的发展和数据量的急剧增长,数据缓存和存储成为了我们在开发过程中必须要考虑的问题之一。PHP作为一门广泛应用的编程语言,也提供了丰富的方法和技巧来实现数据缓存和存储。其中,使用PHP数组进行数据缓存和存储是一种简单而高效的方法。一、数据缓存数据缓存的目的是为了减少对数据库或其他外部数据源的访问次数,从而提高

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경