1)編程:MySQLi面向?qū)ο笾械牟樵儾僮?/p>
<?php /** * 預(yù)處理查詢操作 */ //連接數(shù)據(jù)庫(kù) require 'demo1.php'; //準(zhǔn)備SQL語句 $sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary` < ? ;"; // 創(chuàng)建預(yù)處理對(duì)象 $stmt = $mysqli->stmt_init(); if ($stmt->prepare($sql)) { //綁定參數(shù) $stmt->bind_param('i', $salary); //設(shè)置參數(shù) $salary = 4000; if ($stmt->execute()) { //獲取結(jié)果集并放到緩存區(qū) $stmt->store_result(); //將結(jié)果集中的列綁定到變量上 $stmt->bind_result($id,$name, $salary); //結(jié)果集是否不為,只有不為空的時(shí)候才遍歷 if ($stmt->num_rows > 0) { // 循環(huán)遍歷結(jié)果集 // fetch()每次獲取一條記錄,并將指針自動(dòng)下移 while ($stmt->fetch()) { echo '<p>id:'.$id.'---姓名:' .$name.'---工資:'.$salary.'</p>'; } } else { exit('<p>當(dāng)前表中沒有數(shù)據(jù)</p>'); } // 釋放結(jié)果集 $stmt->free_result(); } else { //返回執(zhí)行階段的出錯(cuò)信息 exit($stmt->errno. ': ' . $stmt->error); } } else { //返回sql語句檢測(cè)階段的出錯(cuò)信息 exit($stmt->errno. ': ' . $stmt->error); } //注銷stmt對(duì)象 $stmt->close(); //關(guān)閉連接 $mysqli->close();
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
2)問答: PDO 的優(yōu)勢(shì)
答:用PDO的好處是,PDO支持多種數(shù)據(jù)庫(kù),而MySQLi只支持MySQL,一但你掌握了就你可以隨心所欲的使用連接多種數(shù)據(jù)庫(kù)。
3)編程:PDO 連接數(shù)據(jù)庫(kù)
<?php /** * PDO PHP數(shù)據(jù)對(duì)象,是PHP操作所有數(shù)據(jù)庫(kù)的抽象層,提供了一個(gè)統(tǒng)一的訪問接口 */ // 數(shù)據(jù)源:設(shè)置數(shù)據(jù)庫(kù)的類型,以及數(shù)據(jù)庫(kù)服務(wù)器和默認(rèn)的數(shù)據(jù)庫(kù) $dsn = 'mysql:host=127.0.0.1; dbname=php'; //用戶名 $user = 'root'; //密碼 $pass = 'root'; //實(shí)例化PDO類,創(chuàng)建pdo對(duì)象,并完成了數(shù)據(jù)庫(kù)的連接 try { $pdo = new PDO($dsn, $user, $pass); echo '<h2>連接成功</h2>'; } catch (PDOException $e) { die('Connect ERROR! :'. $e->getMessage()); } // 關(guān)閉連接 $pdo = null; unset($pdo);
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
4)編程:PDO新增數(shù)據(jù)
<?php /** * 新增記錄 */ //連接數(shù)據(jù)庫(kù) $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //準(zhǔn)備SQL語句,占位符我們不再用?,用"命名占位符" $sql = "INSERT `user` SET `user_name`= :name , `email`= :email, `password`= sha1(:password)"; //創(chuàng)建預(yù)處理對(duì)象 $stmt = $pdo->prepare($sql); //綁定參數(shù) $data = ['name'=>'關(guān)羽','email'=>'gy@php.cn','password'=>'123']; $stmt->bindParam(':name',$data['name'],PDO::PARAM_STR); $stmt->bindParam(':email',$data['email'],PDO::PARAM_STR); $stmt->bindParam(':password',$data['password'],PDO::PARAM_STR); if ($stmt->execute()) { // rowCount(): 返回受影響的記錄數(shù)量 echo '<h3>成功添加了'.$stmt->rowCount().'條記錄</h3>'; } else { echo '<h3>添加失敗</h3>'; print_r($stmt->errorInfo()); exit(); } $stmt = null; // 關(guān)閉連接 $pdo = null;
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
5)編程: PDO更新數(shù)據(jù)
<?php /** * 更新記錄 */ //連接數(shù)據(jù)庫(kù) $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //準(zhǔn)備SQL語句,占位符我們不再用?,用"命名占位符" $sql = "UPDATE `user` SET `email`= :email WHERE `user_id`= :id"; //創(chuàng)建預(yù)處理對(duì)象 $stmt = $pdo->prepare($sql); $stmt->execute(['email'=>'yzf@qq.com','id'=>10]); echo '<h3>成功更新了'.$stmt->rowCount().'條記錄</h3>'; $stmt = null; // 關(guān)閉連接 $pdo = null;
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
6)編程: PDO 刪除數(shù)據(jù)
<?php /** * 刪除記錄 */ //連接數(shù)據(jù)庫(kù) $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //準(zhǔn)備SQL語句,占位符我們不再用?,用"命名占位符" $sql = "DELETE FROM `user` WHERE `user_id`= :id"; //創(chuàng)建預(yù)處理對(duì)象 $stmt = $pdo->prepare($sql); if ($stmt->execute(['id'=>10])) { // rowCount(): 返回受影響的記錄數(shù)量 echo '<h3>成功刪除了'.$stmt->rowCount().'條記錄</h3>'; } else { echo '<h3>無刪除</h3>'; print_r($stmt->errorInfo()); exit(); } $stmt = null; // 關(guān)閉連接 $pdo = null;
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
7)編程:PDO查詢數(shù)據(jù)
<?php /** * PDO 預(yù)處理查詢 */ //連接數(shù)據(jù)庫(kù) $pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root'); //準(zhǔn)備SQL語句,占位符我們不再用?,用"命名占位符" $sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id` < :id"; //創(chuàng)建預(yù)處理對(duì)象 $stmt = $pdo->prepare($sql); //執(zhí)行查詢 $stmt->execute(['id'=>5]); //將結(jié)果集中的列綁定到變量上 $stmt->bindColumn('user_name', $name); $stmt->bindColumn('email', $email); //用列變量來遍歷結(jié)果集 while ($stmt->fetch(PDO::FETCH_BOUND)) { echo '姓名: '.$name.', 郵箱: '.$email.'<br>'; } $stmt = null; // 關(guān)閉連接 $pdo = null;
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
運(yùn)行效果圖:
8)問答:獲取結(jié)果集記錄數(shù)量的正確方式是什么?
答:設(shè)一個(gè)計(jì)數(shù)器,每次操作一次數(shù)據(jù)庫(kù)都統(tǒng)計(jì)一次。
總結(jié):PDO的好處是對(duì)與編程者來說實(shí)際使用的數(shù)據(jù)庫(kù)是透明的,便于移植代碼,雖然這樣的事情不是經(jīng)常發(fā)生。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)