一、PDO连接数据库mysql
pdo连接对象$pdo = new PDO (数据源,用户名,密码)
<?php
/**************
pdo速度快,支持各种数据库。
使用方法: new PDO(数据源,用户名,密码)
数据源信息 数据库类型:host=域名;dbname=数据库名
**************/
//连接
//需要的信息数组
$db = [
'type'=>'mysql',
'host'=>'localhost',
'dbname'=>'php_2019',
'username'=>'root',
'password'=>'*******',
];
$dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
//捕获异常
try{
$pdo = new PDO($dsn,$db['username'],$db['password']);
} catch (PDOException $e){
die('Connection Faild:'.$e->getMessage());
} //啥也不显示
//var_dump($pdo); //打印 object(PDO)#1 (0) { } 连接成功
二、添加数据
//1.预处理 PDOStatement
$sql_insert = 'INSERT INTO `test` SET `title`=:title,`content`=:content';
$stmt = $pdo->prepare($sql_insert);
//2.数据绑定 bindParam() 把要写入的数据赋值给变量
$title = '美联邦通信委员会禁止运营商用联邦补贴购买华为设备,华为凌晨回应';
$content = '美国“政客”网站消息,当地时间22日,美国联邦通信委员会通过禁止运营商使用联邦补贴资金购买华为和中兴设备的决定。“政客”网站认为,这是美国联邦政府试图遏制中国通信企业影响的最新努力。';
$stmt->bindParam('title',$title,PDO::PARAM_STR);
$stmt->bindParam('content',$content,PDO::PARAM_STR);
//3.执行 execute()
if($stmt->execute()){
if($stmt->rowCount()>0){
echo '添加成功'. $stmt->rowCount().'条记录,主键id为:'.$pdo->lastInsertId();
}else{
die('<pre>'. print_r($stmt->errorInfo(),true));
}
}
三、更新数据
//更新
$sql_update = 'UPDATE `test` SET `title`=:title,`content`=:content WHERE `id`=:id';
$stmt = $pdo->prepare($sql_update);
$title = '新闻1';
$content = '内容xxxxx';
$id = 1;
$stmt->bindParam('title',$title,PDO::PARAM_STR);
$stmt->bindParam('content',$content,PDO::PARAM_STR);
$stmt->bindParam('id',$id,PDO::PARAM_INT);
if($stmt->execute()){
if($stmt->rowCount()>0){
echo '更新成功'. $stmt->rowCount().'条记录';
}else{
die('<pre>'. print_r($stmt->errorInfo(),true));
}
}
四、删除数据
//删除
$sql_delete = 'DELETE FROM `test` WHERE `id` = :id';
$stmt = $pdo->prepare($sql_delete);
$id = 1;
$stmt->bindParam('id',$id,PDO::PARAM_INT);
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
echo '成功删除了' . $stmt->rowCount() . '条记录';
}
} else {
die('<pre>' . print_r($stmt->errorInfo(), true));
}
五、查询数据
// 1.单行查询 fetch()
$sql_select = 'SELECT `name` FROM `movies` WHERE `cate_id`=:cate_id';
$stmt = $pdo->prepare($sql_select);
$cate_id = 1;
$stmt->bindParam('cate_id',$cate_id,PDO::PARAM_INT);
$stmt->execute();
while($movies=$stmt->fetch(PDO::FETCH_ASSOC)){
echo '<pre>'.print_r($movies,true);
}
查询分类id为1的影视名称,结果用while循环出来。fetch获取下一个数据。。
//2.全部查询 fetchAll()返回一个包含结果集中所有行的数组
$sql_select_all = 'SELECT `name` FROM `movies` WHERE `cate_id`=:cate_id';
$stmt = $pdo->prepare($sql_select_all);
$cate_id = 3;
$stmt->bindParam('cate_id',$cate_id,PDO::PARAM_INT);
$stmt->execute();
$movies=$stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($movies as $value) {
echo '<pre>'.print_r($value,true);
}
// 3.bindColumn()绑定一列到一个 PHP 变量
$sql = 'SELECT * FROM `movies` WHERE `cate_id` = :cate_id';
$stmt = $pdo->prepare($sql);
$cate_id = 3;
$stmt->bindParam('cate_id',$cate_id,PDO::PARAM_INT);
$stmt->execute();
$stmt->bindColumn('name',$name);
$stmt->bindColumn('detail',$detail);
while($stmt->fetch(PDO::FETCH_ASSOC)){
$detail = mb_substr($detail, 0,20,'utf-8');
echo '片名:'.$name.'<br>'.'简介:'.$detail.'...<hr>';
}
//4.fetchColumn()从结果集中的下一行返回单独的一列
$stmt = $pdo->prepare('SELECT `name`,`image` FROM `movies` WHERE `cate_id` = :cate_id');
$cate_id = 3;
$stmt->bindParam('cate_id',$cate_id,PDO::PARAM_INT);
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_ASSOC());
$name = $stmt->fetchColumn();
$image = $stmt->fetchColumn(1);
echo '片名:'.$name.'<br>'.'图片名:'.$image;
手写:
总结:
基本上了解了PDO是什么,做什么。知道了PDO连接数据库的方法。但是其中很多类方法和静态变量的使用不熟练。sql模板语句传给prepare()方法,PDOStatement对象是pdo类调用prepare方法后生成的,它也包含有很多方法。对其中的方法具体使用场景不不太清楚,有些方法不理解。返回受影响的记录条数是rowCount()方法,只有增删改操作才有。