日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

链接Mysql的api mysqli和pdo

發布時間:2025/3/15 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链接Mysql的api mysqli和pdo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HP 5 及以上版本建議使用以下方式連接 MySQL :

  • MySQLi extension?("i" 意為 improved)
  • PDO (PHP Data Objects)

PDO 應用在 12 種不同數據庫中, MySQLi 只針對 MySQL 數據庫。

如果你的項目需要在多種數據庫中切換,建議使用 PDO?

兩者都是面向對象, 但 MySQLi 還提供了 API 接口

兩者都支持預處理語句。 預處理語句可以防止 SQL 注入,對于 web 項目的安全性是非常重要的?

連接mysql實例

,我們會使用以下三種方式來演示 PHP 操作 MySQL:

  • MySQLi (面向對象)
  • MySQLi (面向過程)
  • PDO

mysqi的面向過程

如下包含連接數據庫、創建數據庫、創建表、插入一條數據、插入多條數據

<?php //面向過程連接數據庫 $conn = mysqli_connect('localhost','root','root'); //判斷是否連接成功 if(!$conn){die('連接數據庫失敗'.mysqli_connect_error()); }else{echo '連接成功';//創建數據庫mytest$sql = 'create database mytest';if(mysqli_query($conn,$sql)){echo '執行成功'.$sql;}else{echo '執行失敗'.mysqli_error($conn);}//選擇數據庫并且創建表執行插入語句if(mysqli_query($conn,'use mytest')){echo '切換數據庫成功';$sql = "create table mytest(id int auto_increment primary key,name varchar(14) not null) ";//如創建表成功if(mysqli_query($conn,$sql)){echo '創建成功'.$sql;}else{echo '創建失敗'.mysqli_error($conn);}//插入多條數據 插入一條數據時候后面不需要分號$sql="insert into mytest (name) values ('webcyh');";$sql.="insert into mytest (name) values ('hony');";//如果只是插入一條數據這里可以改為普通查詢函數mysqli_query()if(mysqli_multi_query($conn,$sql)){echo '插入成功'.$sql;}else{echo '插入失敗'.mysqli_error($conn);}}//關閉數據庫連接mysqli_close($conn); }

語句預處理

預處理語句對于防止 MySQL 注入是非常有用的

預處理語句用于執行多個相同的 SQL 語句,并且執行效率更高

預處理語句的工作原理如下:

  • 預處理:創建 SQL 語句模板并發送到數據庫。預留的值使用參數 "?" 標記 。例如:

    INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  • 數據庫解析,編譯,對SQL語句模板執行查詢優化,并存儲結果不輸出。

  • 執行:最后,將應用綁定的值傳遞給參數("?" 標記),數據庫執行語句。應用可以多次執行語句,如果參數的值不一樣。

  • 相比于直接執行SQL語句,預處理語句有兩個主要優點:

    • 預處理語句大大減少了分析時間,只做了一次查詢(雖然語句多次執行)。

    • 綁定參數減少了服務器帶寬,你只需要發送查詢的參數,而不是整個語句。

    • 預處理語句針對SQL注入是非常有用的,因為參數值發送后使用不同的協議,保證了數據的合法性

    ?

    mysqli查詢語句遇到問題

    原因分析:

    消息說明MYSQL數據庫認為是這一個錯誤的命令執行順序。原因在于MYSQL的存儲過程執行完成后除了返回實際結果集還會返回存儲過程執行的轉態

    ,而上面的代碼僅處理了第一個結果集,第二個結果集并沒有被釋放掉

    建議使用mysqli_query()插入數據 每條語句只插入一條數據

    解決后的代碼:

    <?php //面向過程連接數據庫 $conn = mysqli_connect('localhost','root','root'); //判斷是否連接成功 if(!$conn){die('連接數據庫失敗'.mysqli_connect_error()); }else{echo '連接成功';//創建數據庫mytest$sql = 'create database mytest';if(mysqli_query($conn,$sql)){echo '執行成功'.$sql;}else{echo '執行失敗'.mysqli_error($conn);}//選擇數據庫并且創建表執行插入語句if(mysqli_query($conn,'use mytest')){echo '切換數據庫成功';$sql = "create table mytest(id int auto_increment primary key,name varchar(14) not null) ";//如創建表成功if(mysqli_query($conn,$sql)){echo '創建成功'.$sql;}else{echo '創建失敗'.mysqli_error($conn);}//插入多條數據$sql="insert into mytest (name) values ('webcyh');";$sql.="insert into mytest (name) values ('hony');"; mysqli_autocommit($conn,FALSE);if (mysqli_multi_query($conn,$sql)){do {if ($result = mysqli_store_result()) {while ($row = result_fetch_row($rst)) {echo $row[0];}}} while (mysqli_next_result($conn));}mysqli_commit($conn);$sql='select name from mytest';$rst=mysqli_query($conn,$sql);var_dump($rst);//判斷是否有結果if(mysqli_num_rows($rst)>0){echo '查詢結果如下';while($row=mysqli_fetch_assoc($rst)){echo '姓名'.$row["name"];}}else{echo '沒有結果'.mysqli_error($conn);}//查詢數據并且輸出 }//關閉數據庫連接mysqli_close($conn); }

    輸出結果:

    ?mysqli面向對象方式連接mysql數據庫

    <?php //mysqli面向對象使用mysql實例 如果你使用其他端口(默認為3306),為數據庫參數添加空字符串,如: new mysqli("localhost", "username", "password", "", port) $conn = new mysqli('localhost','root','root'); //判斷是否連接成功 if($conn->connect_error){echo '連接失敗'.$conn->connect_error;//或者mysqli_connect_error(); }else{ //切換數據庫$sql='use mytest';if($conn->query($sql) == TRUE){echo '切換成功';//插入數據使用語句預處理操作$stml=$conn->prepare("insert into test(name) values(?)");//綁定參數$stml->bind_param("s",$name);$name='webcyh';$stml->execute();echo '插入成功';$stml->close();//查詢數據$sql='select * from test';$rst=$conn->query($sql);if($rst->num_rows>0){while($row = $rst->fetch_assoc()){echo $row['name'];}}}else{echo '切換失敗'.$conn->error;}}//關閉數據庫 $conn->close();

    ?

    ?

    ?

    ?

    "INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"

    在 SQL 語句中,我們使用了問號 (?),在此我們可以將問號替換為整型,字符串,雙精度浮點型和布爾值。

    $stmt->bind_param("sss", $firstname, $lastname, $email);

    該函數綁定了 SQL 的參數,且告訴數據庫參數的值。 "sss" 參數列處理其余參數的數據類型。s 字符告訴數據庫該參數為字符串。

    參數有以下四種類型:

    • i - integer(整型)
    • d - double(雙精度浮點型)
    • s - string(字符串)
    • b - BLOB(binary large object:二進制大對象)

    ?

    轉載于:https://www.cnblogs.com/webcyh/p/11281028.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的链接Mysql的api mysqli和pdo的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。