
批改狀態(tài):合格
老師批語:完成的不錯(cuò),繼續(xù)加油。 pdo對你來說確實(shí)有點(diǎn)難。等我們學(xué)了類,就會很好理解了。
pdo連接對象$pdo = new PDO (數(shù)據(jù)源,用戶名,密碼)
<?php
/**************
pdo速度快,支持各種數(shù)據(jù)庫。
使用方法: new PDO(數(shù)據(jù)源,用戶名,密碼)
數(shù)據(jù)源信息 數(shù)據(jù)庫類型:host=域名;dbname=數(shù)據(jù)庫名
**************/
//連接
//需要的信息數(shù)組
$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.預(yù)處理 PDOStatement
$sql_insert = 'INSERT INTO `test` SET `title`=:title,`content`=:content';
$stmt = $pdo->prepare($sql_insert);
//2.數(shù)據(jù)綁定 bindParam() 把要寫入的數(shù)據(jù)賦值給變量
$title = '美聯(lián)邦通信委員會禁止運(yùn)營商用聯(lián)邦補(bǔ)貼購買華為設(shè)備,華為凌晨回應(yīng)';
$content = '美國“政客”網(wǎng)站消息,當(dāng)?shù)貢r(shí)間22日,美國聯(lián)邦通信委員會通過禁止運(yùn)營商使用聯(lián)邦補(bǔ)貼資金購買華為和中興設(shè)備的決定?!罢汀本W(wǎng)站認(rèn)為,這是美國聯(lián)邦政府試圖遏制中國通信企業(yè)影響的最新努力。';
$stmt->bindParam('title',$title,PDO::PARAM_STR);
$stmt->bindParam('content',$content,PDO::PARAM_STR);
//3.執(zhí)行 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 = '內(nèi)容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的影視名稱,結(jié)果用while循環(huán)出來。fetch獲取下一個(gè)數(shù)據(jù)。。
//2.全部查詢 fetchAll()返回一個(gè)包含結(jié)果集中所有行的數(shù)組
$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()綁定一列到一個(gè) 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()從結(jié)果集中的下一行返回單獨(dú)的一列
$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;
手寫:
總結(jié):
基本上了解了PDO是什么,做什么。知道了PDO連接數(shù)據(jù)庫的方法。但是其中很多類方法和靜態(tài)變量的使用不熟練。sql模板語句傳給prepare()方法,PDOStatement對象是pdo類調(diào)用prepare方法后生成的,它也包含有很多方法。對其中的方法具體使用場景不不太清楚,有些方法不理解。返回受影響的記錄條數(shù)是rowCount()方法,只有增刪改操作才有。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號