链接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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python爬虫】爬虫程序的简单处理过
- 下一篇: 前端如何设置背景颜色的透明度 css中