PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PDOStatement->closeCursor> <PDOStatement->bindParam
Last updated: Fri, 03 Jul 2009

view this page in

PDOStatement->bindValue

(PHP 5 >= 5.1.0, PECL pdo >= 1.0.0)

PDOStatement->bindValue Binds a value to a parameter

Description

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.

Parameters

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. Defaults to PDO::PARAM_STR.

Return Values

Returns TRUE on success or FALSE on failure.

Examples

Example #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'$caloriesPDO::PARAM_INT);
$sth->bindValue(':colour'$colourPDO::PARAM_STR);
$sth->execute();
?>

Example #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$caloriesPDO::PARAM_INT);
$sth->bindValue(2$colourPDO::PARAM_STR);
$sth->execute();
?>

See Also



PDOStatement->closeCursor> <PDOStatement->bindParam
Last updated: Fri, 03 Jul 2009
 
add a note add a note User Contributed Notes
PDOStatement->bindValue
Lambdaman
01-May-2009 12:19
If you want to bind a null value to a database field you must use 'NULL' in quotes (for MySQL):

<?php

$stmt
->bindValue(:fieldName, 'NULL');

// not
$stmt->bindValue(:fieldName, NULL);
// or
$stmt->bindValue(:fieldName, null);

?>

Using PHP's null/NULL as a value doesn't work.
nicemandan
11-Feb-2009 07:54
I've slightly altered the PDOBindArray function above so it can receive data types, which will help against injection attacks.

<?php

private function PDOBindArray(&$poStatement, &$paArray){
    foreach (
$paArray as $k=>$v) {
        @
$poStatement->bindValue($k, $v[0], $v[1]);
    }     
}

// the array structure should now look something like this

$inputArray = array(
   
':email' => array($email, PDO::PARAM_STR),
   
':pass' => array($pass, PDO::PARAM_INT)
);
?>
Anonymous
25-Aug-2008 11:31
PDO lacks methods to check if values can be bound to a parameter, e.g.,

if ($statement->hasParameter(':param'))
{
    $statement->bindValue(':param', $value);
}

ATM you *have to know* which parameters exist in the SQL-statement. Otherwise you get an error. You cannot test for them.
streaky at mybrokenlogic dot com
08-Jan-2008 10:20
What the bindValue() docs fail to explain without reading them _very_ carefully is that bindParam() is passed to PDO byref - whereas bindValue() isn't.

Thus with bindValue() you can do something like $stmt->bindValue(":something", "bind this"); whereas with bindParam() it will fail because you can't pass a string by reference, for example.
joe at dsforge dot net
01-Oct-2007 01:46
note that bindParam() doesn't let you bind a table name into a prepared statement, whereas this can be done with bindValue()...
ts//tpdada//art//pl
15-Dec-2006 02:34
For bind whole array at once

<?php

function PDOBindArray(&$poStatement, &$paArray){
 
  foreach (
$paArray as $k=>$v){

    @
$poStatement->bindValue(':'.$k,$v);

  }
// foreach
 
 
} // function

// example

$stmt = $dbh->prepare("INSERT INTO tExample (id,value) VALUES (:id,:value)");

$taValues = array(
 
'id' => '1',
 
'value' => '2'
); // array

PDOBindArray($stmt,$taValues);

$stmt->execute();

?>
Chris L
26-May-2006 10: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.

PDOStatement->closeCursor> <PDOStatement->bindParam
Last updated: Fri, 03 Jul 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites