Rumah pembangunan bahagian belakang tutorial php PDO预处理语句PDOStatement对象

PDO预处理语句PDOStatement对象

Jul 03, 2018 pm 04:53 PM
pdo kenyataan yang disediakan

这篇文章主要介绍了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 — 为语句设置默认的获取模式。
Salin selepas log masuk

1、准备语句

重复执行一个SQL查询,通过每次迭代使用不同的参数,这种情况使用预处理语句运行效率最高。使用预处理语句,首先需要在数据库服务器中先准备好“一个SQL语句”,但并不需要马上执行。PDO支持使用“占位符”语法,将变量绑定到这个预处理的SQL语句中。对于一个准备好的SQL语句,如果在每次执行时都要改变一些列值,这种情况必须使用“占位符号”而不是具体的列值。在PDO中有两种使用占位符的语法:“命名参数”和“问号参数”,使用哪一种语法要看个人的喜好。

使用命名参数作为占位符的INSERT插入语句:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(:name,:address,:phone)”);
Salin selepas log masuk

需要自定义一个字符串作为“命名参数”,每个命名参数需要冒号(:)开始,参数的命名一定要有意义,最好和对应的字段名称相同。
使用问号(?)参数作为占位符的INSERT插入语句:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(?,?,?)”);
Salin selepas log masuk

问号参数一定要和字段的位置顺序对应。不管是使用哪一种参数作为占位符构成的查询,或是语句中没有用到占位符,都需要使用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 ]]] )
Salin selepas log masuk

第一个参数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(&#39;:name&#39;,$name);        //将变量$name的引用绑定到准备好的查询名字参数":name"中
$stmt->blinparam(&#39;:address&#39;,$address);
$stmt->blinparam(&#39;:phone&#39;,phone);
//...
?>
Salin selepas log masuk

使用问号(?)作为占位符的参数绑定示例:

<?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);
//...
?>
Salin selepas log masuk

3、执行准备语句

当准备语句完成,并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了。在下面的示例中,向前面提供的contactinfo表中,使用预处理方式连续执行同一个INSERT语句,通过改变不同的参数添加两条记录。如下所示:

<?php 
try {
     $dbh = new PDO(&#39;mysql:dbname=testdb;host=localhost&#39;, $username, $passwd);
}catch (PDOException $e){
    echo &#39;数据库连接失败:&#39;.$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();           //执行参数被绑定后的准备语句
?>
Salin selepas log masuk

如果你只是要传递输入参数,并且有许多这样的参数要传递,那么你会觉得下面所示的快捷方式语法非常有帮助。是通过在execute()方法中提供一个可选参数,该参数是由准备查询中的命名参数占位符组成的数组,这是第二种为预处理查询在执行中替换输入参数的方式。此语法使你能够省去对$stmt->bindParam()的调用。将上面的示例做如下修改:

<?php 
//...省略PDO连接数据库代码
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query); 
 
//传递一个数组为预处理查询中的命名参数绑定值,并执行一次。
$stmt->execute(array("赵某某","海淀区","15801688348"));
?>
Salin selepas log masuk

另外,如果执行的是INSERT语句,并且数据表中有自动增长的ID字段,可以使用PDO对象中的lastinsertId()方法获取最后插入数据表中的记录ID。如果需要查看其他DML语句是否执行成功,可以通过PDOStatement类对象中的rowCount()方法获取影响记录的行数。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

thinkPHP2.1自定义标签库的导入方法的介绍

使用pthreads实现真正的PHP多线程的方法

Atas ialah kandungan terperinci PDO预处理语句PDOStatement对象. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian kepada PHP Ralat maut: Panggilan ke kaedah yang tidak ditentukan PDO::prepare() in Penyelesaian kepada PHP Ralat maut: Panggilan ke kaedah yang tidak ditentukan PDO::prepare() in Jun 22, 2023 pm 06:40 PM

PHP ialah bahasa pembangunan web popular yang telah digunakan sejak sekian lama. Kelas PDO (Objek Data PHP) yang disepadukan dalam PHP adalah cara biasa untuk kita berinteraksi dengan pangkalan data semasa pembangunan aplikasi web. Walau bagaimanapun, masalah yang sering dihadapi oleh sesetengah pembangun PHP ialah apabila menggunakan kelas PDO untuk berinteraksi dengan pangkalan data, mereka menerima ralat seperti ini: PHPFatalerror:CalltoundefinedmethodPDO::prep

Bagaimana untuk menggunakan sambungan PDO_PGSQL PHP? Bagaimana untuk menggunakan sambungan PDO_PGSQL PHP? Jun 02, 2023 pm 06:10 PM

Sebagai bahasa pengaturcaraan yang popular, PHP digunakan secara meluas dalam bidang pembangunan web. Antaranya, sambungan PDO_PGSQL PHP ialah sambungan PHP yang biasa digunakan Ia menyediakan antara muka interaktif dengan pangkalan data PostgreSQL dan boleh merealisasikan penghantaran data dan interaksi antara PHP dan PostgreSQL. Artikel ini akan memperkenalkan secara terperinci cara menggunakan sambungan PDO_PGSQL PHP. 1. Apakah sambungan PDO_PGSQL? PDO_PGSQL ialah perpustakaan sambungan PHP, yang

PHP dan PDO: Cara melakukan sisipan pukal dan kemas kini PHP dan PDO: Cara melakukan sisipan pukal dan kemas kini Jul 28, 2023 pm 07:41 PM

PHP dan PDO: Cara melakukan sisipan kelompok dan kemas kini Pengenalan: Apabila menggunakan PHP untuk menulis aplikasi berkaitan pangkalan data, anda sering menghadapi situasi di mana anda perlu memasukkan dan mengemas kini data secara berkelompok. Pendekatan tradisional adalah dengan menggunakan gelung untuk melaksanakan pelbagai operasi pangkalan data, tetapi kaedah ini tidak cekap. PDO PHP (PHPDataObject) menyediakan cara yang lebih cekap untuk melaksanakan operasi sisipan dan kemas kini kelompok Artikel ini akan memperkenalkan cara menggunakan PDO untuk melaksanakan operasi sisipan dan kemas kini kelompok. 1. Pengenalan kepada PDO: PDO ialah PH

PHP PDO lwn mysqli: bandingkan dan bezakan PHP PDO lwn mysqli: bandingkan dan bezakan Feb 19, 2024 pm 12:24 PM

PDOPDO ialah lapisan abstraksi akses pangkalan data berorientasikan objek yang menyediakan antara muka bersatu untuk PHP, membolehkan anda menggunakan kod yang sama untuk berinteraksi dengan pangkalan data yang berbeza (seperti Mysql, postgresql, oracle). PDO menyembunyikan kerumitan sambungan pangkalan data asas dan memudahkan operasi pangkalan data. Kebaikan dan Kelemahan Kelebihan: Antara muka bersatu, menyokong berbilang pangkalan data, memudahkan operasi pangkalan data, mengurangkan kesukaran pembangunan, menyediakan penyata yang disediakan, meningkatkan keselamatan, menyokong pemprosesan transaksi Kelemahan: prestasi mungkin lebih rendah sedikit daripada sambungan asli, bergantung pada perpustakaan luaran, mungkin meningkatkan overhed, kod demo menggunakan PDO Sambung ke pangkalan data mysql: $db=newPDO("mysql:host=localhost;dbnam

PHP dan PDO: Cara mengendalikan data JSON dalam pangkalan data PHP dan PDO: Cara mengendalikan data JSON dalam pangkalan data Jul 29, 2023 pm 05:17 PM

PHP dan PDO: Cara mengendalikan data JSON dalam pangkalan data Dalam pembangunan web moden, memproses dan menyimpan sejumlah besar data adalah tugas yang sangat penting. Dengan populariti aplikasi mudah alih dan pengkomputeran awan, semakin banyak data disimpan dalam pangkalan data dalam format JSON (JavaScript Object Notation). Sebagai bahasa sebelah pelayan yang biasa digunakan, sambungan PDO (PHPDataObject) PHP menyediakan cara yang mudah untuk memproses dan mengendalikan pangkalan data. Buku

PHP dan PDO: Cara melaksanakan pertanyaan halaman dan memaparkan data PHP dan PDO: Cara melaksanakan pertanyaan halaman dan memaparkan data Jul 29, 2023 pm 04:10 PM

PHP dan PDO: Cara membuat pertanyaan dan memaparkan data dalam halaman Apabila membangunkan aplikasi web, menanya dan memaparkan data dalam halaman adalah keperluan yang sangat biasa. Melalui paging, kami boleh memaparkan sejumlah data pada satu masa, meningkatkan kelajuan pemuatan halaman dan pengalaman pengguna. Dalam PHP, fungsi pertanyaan paging dan paparan data boleh direalisasikan dengan mudah menggunakan perpustakaan PHP Data Object (PDO). Artikel ini akan memperkenalkan cara menggunakan PDO dalam PHP untuk bertanya dan memaparkan data mengikut halaman, dan memberikan contoh kod yang sepadan. 1. Buat pangkalan data dan jadual data

Bagaimana untuk menyambung ke pangkalan data Redis menggunakan PDO Bagaimana untuk menyambung ke pangkalan data Redis menggunakan PDO Jul 28, 2023 pm 04:29 PM

Cara menggunakan PDO untuk menyambung ke pangkalan data Redis adalah sumber terbuka, berprestasi tinggi, pangkalan data nilai kunci storan dalam memori yang biasa digunakan dalam cache, baris gilir dan senario lain. Dalam pembangunan PHP, menggunakan Redis boleh meningkatkan prestasi dan kestabilan aplikasi dengan berkesan. Melalui sambungan PDO (PHPDataObjects), kami boleh menyambung dan mengendalikan pangkalan data Redis dengan lebih mudah. Artikel ini akan menerangkan cara menggunakan PDO untuk menyambung ke pangkalan data Redis, dengan contoh kod. Pasang sambungan Redis pada mulanya

PHP dan PDO: Bagaimana untuk melakukan carian teks penuh dalam pangkalan data PHP dan PDO: Bagaimana untuk melakukan carian teks penuh dalam pangkalan data Jul 30, 2023 pm 04:33 PM

PHP dan PDO: Bagaimana untuk melakukan carian teks penuh dalam pangkalan data Dalam aplikasi web moden, pangkalan data adalah komponen yang sangat penting. Carian teks penuh ialah ciri yang sangat berguna apabila kita perlu mencari maklumat khusus daripada jumlah data yang besar. PHP dan PDO (PHPDataObjects) menyediakan cara yang mudah tetapi berkuasa untuk melaksanakan carian teks penuh dalam pangkalan data. Artikel ini akan memperkenalkan cara menggunakan PHP dan PDO untuk melaksanakan carian teks penuh dan menyediakan beberapa kod sampel untuk menunjukkan proses tersebut. pertama

See all articles