PDOStatement::bindValue

(no version information, might be only in CVS)

PDOStatement::bindValue --  Binds a value to a parameter

说明

bool PDOStatement::bindValue ( mixed parameter, mixed value [, int data_type] )

Binds a value to a corresponding named or question mark placeholder in the SQL statement that was use to prepare the statement.

参数

parameter

Parameter identifier. For a prepared statement using named placeholders, this will be a parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the 1-indexed position of the parameter.

value

The value to bind to the parameter.

data_type

Explicit data type for the parameter using the PDO_PARAM_* constants.

范例

例子 1. Execute a prepared statement with named placeholders

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$sth->bindValue(':calories', $calories, PDO_PARAM_INT);
$sth->bindValue(':colour', $colour, PDO_PARAM_STR);
$sth->execute();
?>

例子 2. Execute a prepared statement with question mark placeholders

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$sth->bindValue(1, $calories, PDO_PARAM_INT);
$sth->bindValue(2, $colour, PDO_PARAM_STR);
$sth->execute();
?>

参见

PDO::prepare()
PDOStatement::execute()
PDOStatement::bindParam()


add a note add a note User Contributed Notes
Chris L
27-May-2006 06:43
I'm not sure if this is intentional or not, but you can't use a placeholder more than once. I assumed (wrongly) that bindValue() would replace ALL instances of a given placeholder with a value. For example:

<?php

// $db is a PDO object
$stmt = $db->prepare
('
   insert into
       TableA
   (
       ID,
       Name,
       Foo
   )

   select
       null,
       :Name,
       :Foo

   from
       TableA

   where
       Foo = :Foo
'
);

$stmt->bindValue(':Name', 'john doe');
$stmt->bindValue(':Foo', 'foo');

$stmt->execute();

?>

This apparently won't work - you must have separate :SelectFoo and :WhereFoo. I'm using PHP 5.0.4, MySQL 5.0.14, and PDO version 1.0.2.