PDO预处理语句PDOStatement对象使用总结,pdopdostatement_PHP教程
PDO预处理语句PDOStatement对象使用总结,pdopdostatement
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是可选项,通过该参数提供任何数据库驱动程序特定的选项。
使用命名参数作为占位符的参数绑定示例:
//...省略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);
//...
?>
使用问号(?)作为占位符的参数绑定示例:
//...省略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语句,通过改变不同的参数添加两条记录。如下所示:
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()的调用。将上面的示例做如下修改:
//...省略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()方法获取影响记录的行数。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 오랫동안 사용되어 온 인기 있는 웹 개발 언어입니다. PHP에 통합된 PDO(PHP 데이터 개체) 클래스는 웹 애플리케이션 개발 중에 데이터베이스와 상호 작용하는 일반적인 방법입니다. 그러나 일부 PHP 개발자가 자주 직면하는 문제는 PDO 클래스를 사용하여 데이터베이스와 상호 작용할 때 다음과 같은 오류가 발생한다는 것입니다. PHPFatalerror:CalltoundefinemethodPDO::prep

널리 사용되는 프로그래밍 언어인 PHP는 웹 개발 분야에서 널리 사용됩니다. 그 중 PHP의 PDO_PGSQL 확장은 일반적으로 사용되는 PHP 확장으로 PostgreSQL 데이터베이스와의 대화형 인터페이스를 제공하며 PHP와 PostgreSQL 간의 데이터 전송 및 상호 작용을 실현할 수 있습니다. 이 기사에서는 PHP의 PDO_PGSQL 확장 기능을 사용하는 방법을 자세히 소개합니다. 1. PDO_PGSQL 확장이란 무엇입니까? PDO_PGSQL은 PHP의 확장 라이브러리입니다.

PHP 및 PDO: 일괄 삽입 및 업데이트를 수행하는 방법 소개: PHP를 사용하여 데이터베이스 관련 애플리케이션을 작성할 때 데이터를 일괄 삽입하고 업데이트해야 하는 상황에 자주 직면하게 됩니다. 전통적인 접근 방식은 루프를 사용하여 여러 데이터베이스 작업을 수행하는 것이지만 이 방법은 비효율적입니다. PHP의 PDO(PHPDataObject)는 일괄 삽입 및 업데이트 작업을 수행하는 보다 효율적인 방법을 제공합니다. 이 기사에서는 PDO를 사용하여 일괄 삽입 및 업데이트 작업을 구현하는 방법을 소개합니다. 1. PDO 소개: PDO는 PH입니다.

PDOPDO는 PHP용 통합 인터페이스를 제공하는 객체 지향 데이터베이스 액세스 추상화 계층으로, 동일한 코드를 사용하여 다양한 데이터베이스(예: Mysql, postgresql, oracle)와 상호 작용할 수 있습니다. PDO는 기본 데이터베이스 연결의 복잡성을 숨기고 데이터베이스 작업을 단순화합니다. 장점과 단점 장점: 통합 인터페이스, 다중 데이터베이스 지원, 데이터베이스 작업 단순화, 개발 어려움 감소, 준비된 명령문 제공, 보안 향상, 트랜잭션 처리 지원 단점: 성능이 기본 확장보다 약간 낮을 수 있고, 외부 라이브러리에 의존하며, 오버헤드가 증가할 수 있습니다. 데모 코드는 PDO를 사용하여 mysql 데이터베이스에 연결합니다: $db=newPDO("mysql:host=localhost;dbnam

PHP 및 PDO: 데이터베이스에서 JSON 데이터를 처리하는 방법 현대 웹 개발에서 대량의 데이터를 처리하고 저장하는 것은 매우 중요한 작업입니다. 모바일 애플리케이션과 클라우드 컴퓨팅의 인기로 인해 점점 더 많은 데이터가 JSON(JavaScript Object Notation) 형식으로 데이터베이스에 저장됩니다. 일반적으로 사용되는 서버측 언어인 PHP의 PDO(PHPDataObject) 확장은 데이터베이스를 처리하고 운영하는 편리한 방법을 제공합니다. 책

PHP 및 PDO: 페이지에서 데이터를 쿼리하고 표시하는 방법 웹 애플리케이션을 개발할 때 페이지에서 데이터를 쿼리하고 표시하는 것은 매우 일반적인 요구 사항입니다. 페이징을 통해 한 번에 일정량의 데이터를 표시할 수 있어 페이지 로딩 속도와 사용자 경험이 향상됩니다. PHP에서는 PDO(PHP Data Object) 라이브러리를 사용하여 페이징 쿼리 및 데이터 표시 기능을 쉽게 구현할 수 있습니다. 이 기사에서는 PHP에서 PDO를 사용하여 페이지별로 데이터를 쿼리하고 표시하는 방법을 소개하고 해당 코드 예제를 제공합니다. 1. 데이터베이스 및 데이터 테이블 생성

PHP 및 PDO: 데이터베이스에서 전체 텍스트 검색을 수행하는 방법 최신 웹 애플리케이션에서 데이터베이스는 매우 중요한 구성 요소입니다. 전체 텍스트 검색은 대량의 데이터에서 특정 정보를 검색해야 할 때 매우 유용한 기능입니다. PHP 및 PDO(PHPDataObjects)는 데이터베이스에서 전체 텍스트 검색을 수행하는 간단하면서도 강력한 방법을 제공합니다. 이 기사에서는 PHP와 PDO를 사용하여 전체 텍스트 검색을 구현하는 방법을 소개하고 프로세스를 시연하는 몇 가지 샘플 코드를 제공합니다. 첫 번째

PDO를 사용하여 Redis 데이터베이스에 연결하는 방법 Redis는 캐시, 대기열 및 기타 시나리오에서 일반적으로 사용되는 고성능 오픈 소스 인메모리 스토리지 키-값 데이터베이스입니다. PHP 개발에서 Redis를 사용하면 애플리케이션의 성능과 안정성을 효과적으로 향상시킬 수 있습니다. PDO(PHPDataObjects) 확장을 통해 Redis 데이터베이스를 보다 편리하게 연결하고 운영할 수 있습니다. 이 문서에서는 코드 예제와 함께 PDO를 사용하여 Redis 데이터베이스에 연결하는 방법을 설명합니다. 처음에 Redis 확장을 설치하십시오.
