zoukankan      html  css  js  c++  java
  • PHP 笔记——PDO操作数据库

    一、简介

    ​ PHP 5.1可使用轻量级的统一接口 PDO(PHP Data Object,PHP数据对象)来访问各种常见的数据库。而使用PDO只需要指定不同的 DSN(数据源名称)即可访问不同的数据库。

    二、PDO开启

    在Windows中要使用PHP访问MySQL数据库,首先需要在php.ini文件中启用设置:

    ​ extension=php_pdo.dll:启用PDO扩展库。

    ​ extension=php_pdo_mysql.dll:启用MySQL扩展库。

    三、PDO对象初始化

    连接服务器:

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql'; 			// 指定连接的数据库驱动名称
    	$dbname = 'test';			// 指定要连接的数据库
    	$username = 'root';			// 指定连接使用的用户名称
    	$passwd = 'root';			// 指定连接用户的密码
    	$host = 'localhost:3306';	// 指定 MySQL 服务器名称,注意端口号
    	$dsn = "$dbms:host=$host;dbname=$dbname";	// 构造 DSN,$dbms 后是冒号,其它参数间是分号
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    	} catch (PDOException $exc) {
    		echo "Could not connect to the database<br/>".$exc->getMessage();
    	}
    
    	print_r($pdo);
    ?>
    

    创建、删除数据库:

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql';
    	$username = 'root';
    	$passwd = 'root';	
    	$host = 'localhost:3306';
    	$dsn = "$dbms:host=$host";	// 连接到服务器创建和删除数据库,所以不需要指定连接的数据库
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    
    		$n = $pdo->exec('create database testdb');
    		echo "$n 成功创建数据库<br>";
    
    		$n = $pdo->exec('drop database testdb');
    		echo "$n 成功删除数据库<br>";
    
    	} catch (PDOException $exc) {
    		echo "数据库连接失败!".$exc->getMessage();
    	}
    ?> 
    

    四、PDO对象应用

    pdo对象成员方法:

    query($sql);	// 用于执行查询SQL语句。返回PDOStatement对象
    exec($sql);		// 用于执行增、删、改操作,返回影响行数
    setAttribute();	// 设置一个“数据库连接对象”属性
    fetchAll();		// 解析数据
    

    记录查询:

    (1)使用query()方法执行查询

    $sql = "SELECT * FROM stu";
    $stmt = $pdo->query($sql);
    

    ps:

    1. query()方法参数为一个查询字符串,查询执行成功返回包含查询结果集的PDOStatement对象,若失败则返回FALSE。

    2. 若查询结果集中记录没有读取完,试图再次执行query()方法将会出错。此
      时,可在再次执行query()方法前,调用PDOStatement的closeCursor()方法释
      放PDOStatement对象关联的数据库资源。

    (2)使用预处理查询

    • 实现SQL语句的预处理
    • 首先需要预处理一个待执行的SQL语句模板
    • 然后为该模板进行参数绑定
    • 最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行

    如果一个查询需要多次执行,则可使用PDO对象的 prepare() 方法预先提交查询,服务器准备一个预处理查询语句。然后可多次调用PDOStatement对象的execute()方法执行查询。

    $stmt = $pdo->prepare($sql);
    

    查询执行成功返回包含查询结果集的PDOStatement对象,若失败则返回FALSE。

    $sql = "SELECT * FROM users";
    $stmt = $pdo->prepare($sql);
    // 准备好语句后,调用execute()方法执行查询
    $b = $stmt->execute();
    var_dump($b);
    

    (3)使用带参数的预处理查询

    在预处理查询过程中可对其参数进行设置,分别是使用问号参数、使用命名参数和将参数绑定到变量(:参数名,以冒号开始的参数名)3种方式设置参数。

    ① 使用问号参数
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id>? and data LIKE ?");
    $b = $stmt->execute(array(2,"php%"));
    var_dump($b);
    
    ② 使用命名参数
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id>:id and data LIKE :filter");
    $b = $stmt->execute(array(':id'=>2,':filter'=>"C%"));
    var_dump($b);
    
    ③ 将参数绑定到变量

    可以将参数绑定到变量,变量的值作为参数值。

    如果参数不是命名参数,在绑定时,可使用1开始的整数表示对应参数。

    处理查询结果集

    ​ 不管用query()方法还是execute()方法执行查询操作,查询结果都保存在PDOStatement对象中。可用PDOStatement对象的fetch()、fetchAll()或fetchColumn()方法从查询结果中集中读取数据。

    (1)使用fetch()方法读取查询结果

    fetch()方法返回一个包含查询结果集下一条记录的数据,已无记录时返回
    FALSE。其基本格式为:

    $row = $stmt->fetch($fetch_style);
    

    参数 $fetch_style:

    PDO::FETCH_NUM:用0开始的整数作为数组元素下标。
    PDO::FETCH_ASSOC:用列名作为数组元素下标。
    PDO::FETCH_BOTH:默认值,既有整数下标,也有列名下标。

    执行:

    foreach ( $stmt as $row ){
    	echo $row['Name']."<br>";
    }	
    
    while($row = $stmt->fetch()){
    	echo $row['Name']."<br>";
    }
    

    (2)使用fetchAll()方法读取查询结果

    fetchAll()方法指返回查询结果集中剩余的全部记录到一个二维数组,无
    记录时返回FALSE。其基本格式为:

    $rows = $stmt->fetchAll($fetch_style);
    

    执行:

    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    print_r($rows);
    

    (3)fetchColumn()方法读取查询结果

    fetchColumn()方法返回查询结果集下一条记录中指定列的值,已无记
    录时返回FALSE。其基本格式为:

    $a = $stmt->fetchColumn($n);
    $a = $stmt->fetchColumn();	// 获取下条记录的第1列
    $a = $stmt->fetchColumn(1);	// 获取下条记录的第2列
    

    五、几个例子

    例一

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql'; 			
    	$dbname = 'db_employee';			
    	$username = 'root';			
    	$passwd = 'root';			
    	$host = 'localhost:3306';	
    	$dsn = "$dbms:host=$host;dbname=$dbname";	
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    	} catch (PDOException $exc) {
    		echo "数据库连接失败!".$exc->getMessage();
    	}
    
    	$sql = 'SELECT * FROM tb_employee';
    	$stmt = $pdo->query($sql);
    
    	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    	print_r($rows);
    ?>
    

    例二

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql'; 			
    	$dbname = 'db_employee';			
    	$username = 'root';			
    	$passwd = 'root';			
    	$host = 'localhost:3306';	
    	$dsn = "$dbms:host=$host;dbname=$dbname";	
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    	} catch (PDOException $exc) {
    		echo "数据库连接失败!".$exc->getMessage();
    	}
    
    	$sql = 'SELECT * FROM tb_employee';
    	$stmt = $pdo->query($sql);
    
        foreach ( $stmt as $row ){
            echo $row['Name']."<br>";
        }	
    ?>
    

    例三

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql'; 			
    	$dbname = 'db_employee';			
    	$username = 'root';			
    	$passwd = 'root';			
    	$host = 'localhost:3306';	
    	$dsn = "$dbms:host=$host;dbname=$dbname";	
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    	} catch (PDOException $exc) {
    		echo "数据库连接失败!".$exc->getMessage();
    	}
    
    	$sql = 'SELECT * FROM tb_employee';
    	$stmt = $pdo->query($sql);
    
        while($row = $stmt->fetch()){
    	    echo $row['Name']."<br>";
        }
    ?>
    

    例四

    <?php
    	header("Content-Type: text/html; charset=utf-8");
    	$dbms = 'mysql'; 			
    	$dbname = 'db_employee';			
    	$username = 'root';			
    	$passwd = 'root';			
    	$host = 'localhost:3306';	
    	$dsn = "$dbms:host=$host;dbname=$dbname";	
    
    	try {
    		$pdo = new PDO($dsn, $username, $passwd);
    		echo "使用 PDO 成功连接至 MySQL 服务器<br>";
    	} catch (PDOException $exc) {
    		echo "数据库连接失败!".$exc->getMessage();
    	}
    
    	$sql = 'SELECT * FROM tb_employee';
    	$stmt = $pdo->prepare($sql);
    	$b = $stmt->execute();
    
        while($row = $stmt->fetch()){
    	    echo $row['Name']."<br>";
        }
    ?>
    
  • 相关阅读:
    Lucene.Net
    授权
    测试
    Upgrade ASP.NET 1.1 To ASP.NET 2.0 Cookie
    Highlight
    缓存
    base
    System.Environment.UserDomainName 为什么不返回 当前的 Domainname
    英语骂人一百句
    比较动态调用代码
  • 原文地址:https://www.cnblogs.com/xzh0717/p/10661047.html
Copyright © 2011-2022 走看看