PDO預處理語句PDOStatement對象
這篇文章主要介紹了PDO預處理語句PDOStatement物件使用總結,本文介紹了PDOStatement的方法及常用方法的使用範例,需要的朋友可以參考下
PDO對預處理語句的支持需要使用PDOStatement類別對象,但該類別物件並不是透過NEW關鍵字實例化出來的,而是透過PDO對像中的prepare()方法,在資料庫伺服器中準備好一個預處理的SQL語句後直接傳回的。如果透過先前執行PDO對像中的query()方法傳回的PDOStatement類別對象,只代表的是一個結果集物件。而如果透過執行PDO對像中的prepare()方法所產生的PDOStatement類別對象,則為一個查詢對象,能定義並執行參數化的SQL指令。 PDOStatement類別中的全部成員方法如下所示:
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量 PDOStatement::bindParam — 绑定一个参数到指定的变量名 PDOStatement::bindValue — 把一个值绑定到一个参数 PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。 PDOStatement::columnCount — 返回结果集中的列数 PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令 PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息 PDOStatement::execute — 执行一条预处理语句 PDOStatement::fetch — 从结果集中获取下一行 PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组 PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。 PDOStatement::fetchObject — 获取下一行并作为一个对象返回。 PDOStatement::getAttribute — 检索一个语句属性 PDOStatement::getColumnMeta — 返回结果集中一列的元数据 PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集 PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数 PDOStatement::setAttribute — 设置一个语句属性 PDOStatement::setFetchMode — 为语句设置默认的获取模式。
1、準備語句
重複執行一個SQL查詢,透過每次迭代使用不同的參數,這種情況使用預處理語句運作效率最高。使用預處理語句,首先需要在資料庫伺服器中先準備好“一個SQL語句”,但並不需要馬上執行。 PDO支援使用「佔位符」語法,將變數綁定到這個預處理的SQL語句中。對於一個準備好的SQL語句,如果在每次執行時都要改變一些列值,這種情況必須使用「佔位符號」而不是具體的列值。在PDO中有兩種使用佔位符的語法:“命名參數”和“問號參數”,使用哪一種語法要看個人的喜好。
使用命名參數作為佔位符的INSERT插入語句:
$dbh->prepare(“insert into contactinfo(name,address,phone) values(:name,:address,:phone)”);
需要自訂一個字串作為“命名參數”,每個命名參數需要冒號(:)開始,參數的命名一定要有意義,最好和對應的欄位名稱相同。
使用問號(?)參數作為佔位符的INSERT插入語句:
$dbh->prepare(“insert into contactinfo(name,address,phone) values(?,?,?)”);
問號參數一定要和欄位的位置順序對應。不管是使用哪一種參數作為佔位符構成的查詢,或是語句中沒有用到佔位符,都需要使用PDO物件中的prepare()方法,去準備這個將要用於迭代執行的查詢,並傳回PDOStatement類別物件。
2、綁定參數
當SQL語句透過PDO物件中的prepare()方法在資料庫伺服器端準備好了以後,如果使用了佔位符,就需要在每次執行時取代輸入的參數。可以透過PDOStatement物件中的bindParam()方法,把參數變數綁定到準備好的佔位符上(位置或名字要對應)。方法bindParame()的原型如下所示:
bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
第一個參數parameter是必選項,如果在準備好的查詢中佔位符語法使用名字參數,那麼將名字參數字串作為bindParam( )方法的第一個參數提供。如果佔位符語法使用問號參數,那麼將準備好的查詢中列值佔位符的索引偏移量,作為該方法的第一個參數。
第二個參數variable也是可選項,提供供給第一個參數所指定佔位符的值。因為該參數是按引用傳遞的,所以只能提供變數作為參數,不能直接提供數值。
第三個參數data_type是可選項,為目前被綁定的參數設定資料型態。可以為以下值。
PDO::PARAM_BOOL 代表boolean資料型別。
PDO::PARAM_NULL 代表SQL中的NULL型別。
PDO::PARAM_INT 代表SQL中的INTEGER資料型別。
PDO::PARAM_STR 代表SQL中的CHAR、VARCHAR和其他字串資料型別。
PDO::PARAM_LOB 代表SQL中大物件資料型別。
第四個參數length是可選項,用於指定資料類型的長度。
第五個參數driver_options是可選項,透過此參數提供任何資料庫驅動程式特定的選項。
使用命名參數作為佔位符的參數綁定範例:
<?php //...省略PDO连接数据库代码 $query = "insert into contactinfo (name,address,phone) values(:name,:address,:phone)"; $stmt = $dbh->prepare($query); //调用PDO对象中的prepare()方法 $stmt->blinparam(':name',$name); //将变量$name的引用绑定到准备好的查询名字参数":name"中 $stmt->blinparam(':address',$address); $stmt->blinparam(':phone',phone); //... ?>
使用問號(?)作為佔位符的參數綁定範例:
<?php //...省略PDO连接数据库代码 $query = "insert into contactinfo (name,address,phone) values(?,?,?)"; $stmt = $dbh->prepare($query); //调用PDO对象中的prepare()方法 $stmt->blinparam(1,$name,PDO::PARAM_STR); //将变量$name的引用绑定到准备好的查询名字参数":name"中 $stmt->blinparam(2,$address,PDO::PARAM_STR); $stmt->blinparam(3,phone,PDO::PARAM_STR,20); //... ?>
3、執行準備語句
當準備語句完成,並綁定了對應的參數後,就可以透過呼叫PDOStatement類別物件中的execute()方法,重複執行在資料庫快取區準備好的語句了。在下面的範例中,向前面提供的contactinfo表中,使用預處理方式連續執行同一個INSERT語句,透過改變不同的參數來新增兩筆記錄。如下所示:
<?php try { $dbh = new PDO('mysql:dbname=testdb;host=localhost', $username, $passwd); }catch (PDOException $e){ echo '数据库连接失败:'.$e->getMessage(); exit; } $query = "insert into contactinfo (name,address,phone) values(?,?,?)"; $stmt = $dbh->prepare($query); $stmt->blinparam(1,$name); $stmt->blinparam(2,$address); $stmt->blinparam(3,phone); $name = "赵某某"; $address = "海淀区中关村"; $phone = "15801688348"; $stmt->execute(); //执行参数被绑定后的准备语句 ?>
如果你只是要傳遞輸入參數,並且有許多這樣的參數要傳遞,那麼你會覺得下面所示的快捷方式語法非常有幫助。是透過在execute()方法中提供一個可選參數,該參數是由準備查詢中的命名參數佔位符組成的數組,這是第二種為預處理查詢在執行中替換輸入參數的方式。此語法使你能夠省去對$stmt->bindParam()的呼叫。將上面的範例做如下修改:
<?php //...省略PDO连接数据库代码 $query = "insert into contactinfo (name,address,phone) values(?,?,?)"; $stmt = $dbh->prepare($query); //传递一个数组为预处理查询中的命名参数绑定值,并执行一次。 $stmt->execute(array("赵某某","海淀区","15801688348")); ?>
另外,如果執行的是INSERT語句,且資料表中有自動成長的ID字段,可以使用PDO物件中的lastinsertId()方法取得最後插入資料表中的記錄ID。如果需要查看其他DML語句是否執行成功,可以透過PDOStatement類別物件中的rowCount()方法來取得影響記錄的行數。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
#
以上是PDO預處理語句PDOStatement對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP作為一種流行的Web開發語言,已經被使用很久了。 PHP中整合的PDO(PHP資料物件)類別是我們在開發Web應用程式過程中與資料庫互動的常用方法。但是,一些PHP開發者經常遇到的問題是,當使用PDO類別與資料庫互動時,他們會收到這樣的錯誤:PHPFatalerror:CalltoundefinedmethodPDO::prep

PHP作為一種流行的程式語言,在Web開發領域中有著廣泛的應用。其中,PHP的PDO_PGSQL擴展是一種常用的PHP擴展,它提供了與PostgreSQL資料庫的交互接口,可以實現PHP與PostgreSQL之間的資料傳輸和交互。本文將詳細介紹如何使用PHP的PDO_PGSQL擴充。一、什麼是PDO_PGSQL擴充? PDO_PGSQL是PHP的擴充庫,它

PHP和PDO:如何執行批次插入和更新導言:在使用PHP編寫資料庫相關的應用程式時,經常會遇到需要批次插入和更新資料的情況。傳統的做法是使用循環來執行多次資料庫操作,但這樣的方法效率較低。 PHP的PDO(PHPDataObject)提供了一種更有效率的方法來執行批次插入和更新操作,本文將介紹如何使用PDO來實現批次插入和更新。一、PDO簡介:PDO是PH

PHP和PDO:如何進行分頁查詢和顯示資料在開發網頁應用程式時,分頁查詢和顯示資料是一個非常常見的需求。透過分頁,我們可以一次顯示一定數量的數據,提高頁面載入速度和使用者體驗。在PHP中,使用PHP資料物件(PDO)函式庫可以輕鬆實現分頁查詢和顯示資料的功能。本文將介紹如何在PHP中使用PDO進行分頁查詢和顯示數據,並提供相應的程式碼範例。一、建立資料庫和資料表

PHP和PDO:如何執行資料庫中的全文搜尋在現代的Web應用程式中,資料庫是一個很重要的組成部分。當我們需要從大量的資料中搜尋特定的資訊時,全文搜尋是一種非常有用的功能。 PHP和PDO(PHPDataObjects)提供了一種簡單且強大的方法來執行資料庫中的全文搜尋。本文將介紹如何使用PHP和PDO來實現全文搜索,並提供一些範例程式碼來示範這個過程。首先

PHP和PDO:如何處理資料庫中的JSON資料在現代web開發中,處理和儲存大量資料是一個非常重要的任務。隨著行動應用和雲端運算的普及,越來越多的資料以JSON(JavaScriptObjectNotation)格式儲存在資料庫中。 PHP作為一種常用的伺服器端語言,它的PDO(PHPDataObject)擴充提供了一種方便的方式來處理和操作資料庫。本

PDOPDO是一個物件導向的資料庫存取抽象層,它為PHP提供了一個統一的接口,允許您使用相同的程式碼與不同的資料庫(如Mysql、postgresql、oracle)進行互動。 PDO隱藏了底層資料庫連線的複雜性,簡化了資料庫操作。優缺點優點:統一接口,支援多種資料庫簡化資料庫操作,降低開發難度提供預處理語句,提高安全性支援事務處理缺點:效能可能比原生擴充稍低依賴外部函式庫,可能會增加開銷演示程式碼使用PDO連線mysql資料庫:$db=newPDO("mysql:host=localhost;dbnam

1.PDO簡介PDO是PHP的擴充庫,它提供了一個物件導向的方式來操作資料庫。 PDO支援多種資料庫,包括Mysql、postgresql、oracle、SQLServer等。 PDO使開發人員能夠使用統一的api來操作不同的資料庫,這使得開發人員可以在不同的資料庫之間輕鬆切換。 2.PDO連接資料庫要使用PDO連接資料庫,首先需要建立一個PDO物件。 PDO物件的建構函式接收三個參數:資料庫類型、主機名稱、資料庫使用者名稱和密碼。例如,以下程式碼建立了一個連接到mysql資料庫的物件:$dsn="mysq
