每次傳送查詢語句給MySQL服務時,都必須解析該查詢的語法,確保結構正確並且能夠執行。這是這個過程中必要的步驟,但也確實帶來了一些開銷。做一次是必要的,但是如果反覆地執行相同的查詢,批量插入多行時只改變列值,準備語句會在伺服器上快取查詢的語法和執行過程,而只在伺服器和客戶端之間傳輸有變化的列值,以此來消除這些額外的開銷。
首先我們來看看PDO::prepare
的語法:
public PDO::prepare ( string $statement , array $driver_options = array() ) : PDOStatement
$statement:必須是對目標資料庫伺服器有效的SQL 語句模板。
$driver_options:陣列包含一個或多個key=>value 鍵值對,為傳回的PDOStatement 物件設定屬性
傳回值如果資料庫伺服器完成準備了語句,則傳回PDOStatement 物件。如果資料庫伺服器無法準備語句,PDO::prepare() 傳回 false 或拋出PDOException (取決於 錯誤處理器)。
程式碼實例:
1.連接資料庫
<?php $servername="localhost"; $username="root"; $password="root123456"; $dbname="my_database"; $pdo=new PDO("mysql:host=$servername;dbname=$dbname",$username,$password); echo "连接成功"."<br>"; $pdo->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
输出:连接成功
2.使用問號參數來準備SQL語句
$sql ="select * from fate where `id`=?"; $statement=$pdo->query("select * from fate where `id`=3 "); var_dump($statement->fetch()); echo "<br>"; $stmt2 = $pdo->prepare($sql); $stmt2 ->execute(array(3)); var_dump($stmt2->fetch());
输出:array(6) {["ID"]=>string(1) "3"0]=>string(1) "3"["NAME"]=>string(7) "luncher"[1]=>string(7) "luncher"["AGE"]=>string(2) "56"[2]=>string(2) "56"} array(6) {["ID"]=>string(1) "3"[0]=>string(1) "3"["NAME"]=>string(7) "luncher"[1]=>string(7) "luncher"["AGE"]=>string(2) "56"[2]=>string(2) "56"}
#3.使用命名參數來準備SQL語句
#$query = "insert into tp_user (id,name,gender)values(:id,:name ,:gender)"; //准备语句 $stmt1 = $pdo->prepare($query); // 执行查询 $stmt1->execute(array('id'=> 1,':name' => '张三', ':gender' => '男')); //再次执行 $stmt1->execute(array('id'=> 2,':name' => '李四', ':gender' => '女')); echo "插入成功!","<br>";
输出;插入成功!
推薦:《2021年PHP面試題大總結(收藏)》《
######################################### #php影片教學######》#######以上是對PHP中的prepare()方法的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!