PDO::prepare
PDO::prepare
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDO :: prepare - 准备执行语句并返回一个语句对象
描述
public PDOStatement PDO::prepare ( string $statement [, array $driver_options = array() ] )
准备要由PDOStatement :: execute()方法执行的SQL语句。SQL语句可以包含零个或多个名为(:name)或问号(?)参数标记,在执行语句时,实数值将被替换。您不能在同一个SQL语句中使用命名和问号参数标记; 选择一个或另一个参数样式。使用这些参数来绑定任何用户的输入,不要直接在查询中包含用户的输入。
当您调用PDOStatement :: execute()时,您必须为每个希望传入语句的值包含一个唯一的参数标记。除非启用了仿真模式,否则不能在准备好的语句中多次使用同名的命名参数标记。
注意
:参数标记只能表示一个完整的数据文字。字面、关键字、标识符以及任何任意查询部分都不能使用参数绑定。例如,不能将多个值绑定到SQL语句的IN()子句中的单个参数。
对于将使用不同参数值多次发布的语句,调用PDO :: prepare()
和PDOStatement :: execute()可以通过允许驱动程序协商查询计划的客户端和/或服务器端缓存来优化应用程序的性能、元信息,并且不需要通过手动引用参数来帮助防止SQL注入攻击。
如果驱动程序支持一种风格但不支持另外的风格,则PDO将模拟不在本地支持它们的驱动程序的预准备语句/绑定参数,并且还可以将命名或问号风格参数标记重写为更适合的内容。
参数
statement
这必须是目标数据库服务器的有效SQL语句模板。
driver_options
此数组包含一个或多个key =>值对,以便为此方法返回的PDOStatement对象设置属性值。你会最常使用的设置PDO :: ATTR_CURSOR值PDO :: CURSOR_SCROLL请求滚动游标。某些驱动程序具有可能在准备时设置的驱动程序特定选项。
返回值
如果数据库服务器成功准备语句,则PDO :: prepare()
将返回一个PDOStatement对象。如果数据库服务器无法成功准备语句,则PDO :: prepare()
返回FALSE
或发出PDOException(取决于错误处理)。
注意
:仿真准备语句不与数据库服务器通信,所以PDO :: prepare()
不检查语句。
示例
示例#1准备一个带有命名参数的SQL语句
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)
$sth->execute(array(':calories' => 150, ':colour' => 'red')
$red = $sth->fetchAll(
$sth->execute(array(':calories' => 175, ':colour' => 'yellow')
$yellow = $sth->fetchAll(
?>
示例#2准备带有问号参数的SQL语句
<?php
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?'
$sth->execute(array(150, 'red')
$red = $sth->fetchAll(
$sth->execute(array(175, 'yellow')
$yellow = $sth->fetchAll(
?>
扩展内容
- PDO :: exec() - 执行一条SQL语句并返回受影响的行数
- PDO :: query() - 执行一条SQL语句,返回一个结果集作为PDOStatement对象
- PDOStatement :: execute() - 执行准备好的语句
← PDO::lastInsertId
PDO::query →