开启mysql扩展为例
;
去掉,然后重新启动php.exe程序(或重启apache);语法:PDO::__construct ( string
d s n ‘ [ , s t r i n g ‘ dsn` [, string ` dsn‘[,string‘username[, string
p a s s w o r d ‘ [ , a r r a y ‘ password` [, array ` password‘[,array‘driver_options]]] )
代码实现
/* 创建一个连接mysql数据库的pdo对象 */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
$sql = "INSERT INTO user (id,name,age,sex) VALUES(null,'xiaode',99,1)";
$rel=$pdo->exec($sql);
var_dump($rel);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//查询结果集
$sql = "SELECT * FROM user ORDER BY id DESC";
$rel = $pdo->query($sql);
var_dump($rel);
//输出结果
//object(PDOStatement)#2 (1) { ["queryString"]=> string(35) "SELECT * FROM user ORDER BY id DESC" }
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//插入语句
$sql = "INSERT INTO user (id,name,age,sex) VALUES(null,'xiaode',99,1)";
$rel=$pdo->exec($sql);
//获取最后插入的id获取序列号
$rel=$pdo->lastInsertId();
var_dump($rel);//输出结果为4
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
描述:设置数据库句柄的属性
语法:bool PDO::setAttribute(int $attribute,mixed $value)
注意:PDO内置了以下可用的通用属性,使用参考 手册
返回值:成功返回true,失败返回false
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//设置PDO属性 设置从结果集中提取值 FETCH_ASSOC为关联数组 FETCH_NUM枚举
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
//查询结果集
$sql = "SELECT * FROM user ORDER BY id DESC";
$rel = $pdo->query($sql);
//遍历结果集
foreach($rel as $v){
echo ""
;
var_dump($v);
}
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
输出结果如下:
array(4) {
["id"]=>
string(1) "4"
["name"]=>
string(6) "xiaode"
["age"]=>
string(2) "99"
["sex"]=>
string(1) "1"
}
$statement
[, array $driver_options
= array() ] ):name
形式的参数名,对于问号占位符的预处理语句,应该是以1开始的索引参数位置示例1:使用命名参数方式示例
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//设置异常捕捉
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//使用命名参数进行绑定
$sql = "INSERT INTO user(name,age,sex) VALUES(:name,:age,:sex)";
//对内容进行预编译
$stmt = $pdo->prepare($sql);
//对占位数据进行绑定
$stmt->bindValue(':name','rufeike');
$stmt->bindValue(':age',30);
$stmt->bindValue(':sex',0);
//执行已预编译的sql
$rel=$stmt->execute();
//获取最后插入的id
$id=$pdo->lastInsertId();
var_dump($id);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
echo "错误编号:".$e->getCode();
echo "错误行号:".$e->getLine();
}
示例2:使用问号参数绑定
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//设置异常捕捉
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//使用问号参数绑定方式
$sql = "INSERT INTO user(name,age,sex) VALUES(?,?,?)";
//对sql语句进行预编译
$stmt = $pdo->prepare($sql);
//对占位符进行数据绑定
$stmt->bindValue(1,'如非客2');
$stmt->bindValue(2,28);
$stmt->bindValue(3,1);
//执行已编译的sql
$rel = $stmt->execute();
//获取最后出入的主键
$id = $pdo->lastInsertId();
var_dump($id);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
echo "错误编号:".$e->getCode();
echo "错误行号:".$e->getLine();
}
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
$sql = "SELECT * FROM user ORDER BY id DESC";
$stmt = $pdo->query($sql);
//每次从结果集中提取一行数据
while($rel=$stmt->fetch(PDO::FETCH_ASSOC)){
echo ""
;
var_dump($rel);
}
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
结果输出
array(4) {
["id"]=>
string(1) "4"
["name"]=>
string(6) "xiaode"
["age"]=>
string(2) "99"
["sex"]=>
string(1) "1"
}
array(4) {
["id"]=>
string(1) "3"
["name"]=>
string(6) "xiaode"
["age"]=>
string(2) "99"
["sex"]=>
string(1) "1"
}
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
$sql = "SELECT * FROM user ORDER BY id DESC";
$stmt = $pdo->query($sql);
//一次性全部取出
$rel=$stmt->fetchAll(PDO::FETCH_ASSOC);
echo ""
;
var_dump($rel);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
输出结果
array(4) {
[0]=>
array(4) {
["id"]=>
string(1) "4"
["name"]=>
string(6) "xiaode"
["age"]=>
string(2) "99"
["sex"]=>
string(1) "1"
}
[1]=>
array(4) {
["id"]=>
string(1) "3"
["name"]=>
string(6) "xiaode"
["age"]=>
string(2) "99"
["sex"]=>
string(1) "1"
}
}
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//获取查询结果集数
$sql = "SELECT * FROM user ORDER BY id DESC";
$stmt = $pdo->query($sql);
$count=$stmt->rowCount();
var_dump($count);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
输出结果:
int(4)
静默模式:错误发生后,不会主动报错
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//静默模式下获取错误信息
$sql = "SELECT * FROM user WHERE abc = 'abc'";
$stmt = $pdo->query($sql);
echo "查询错误编号:".$pdo->errorCode();
echo "查询错误信息:".print_r($pdo->errorInfo());
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
错误信息打印结果:
查询错误编号:42S22Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'abc' in 'where clause' ) 查询错误信息:1
没有错误是的打印结果 errorCode为00000时表示没有错误
查询错误编号:00000Array ( [0] => 00000 [1] => [2] => ) 查询错误信息:1
警告模式:错误发生后,通过PHP标准来报错误
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//设置警告模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
//警告模式下获取错误信息 数据库中没有i字段
$sql = "SELECT * FROM user WHERE i = 2";
$stmt = $pdo->query($sql);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
}
错误打印结果
Warning: PDO::query(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'i' in 'where clause' in C:\Users\rufeike\Desktop\phasher\test\index.php on line 52
异常模式:错误发生后,抛出异常,需要捕捉和处理
//创建一个连接mysql数据库的PDO对象
$dsn = 'mysql:dbname=pdotest;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root';
try{
$pdo = new PDO($dsn,$user,$password);
//设置异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//异常模式下获取错误信息
$sql = "SELECT * FROM user WHERE i = 2";
$stmt = $pdo->query($sql);
}catch(PDOException $e){
echo "Connection faile:".$e->getMessage();
echo "错误编号:".$e->getCode();
echo "错误行号:".$e->getLine();
}
错误打印结果
Connection faile:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'i' in 'where clause'错误编号:42S22错误行号:52