What is the difference between PDOStatement::bindParam() and PDOStatement::bindValue()?
The bindValue() function binds a value to a named or question mark in the SQL statement. The bindValue() function is used to pass both value and variable.
PDO::PARAM_STR. Represents the SQL CHAR, VARCHAR, or other string data type. integer. PDO::PARAM_LOB. Represents the SQL large object data type.
From the manual entry for PDOStatement::bindParam:
[With
bindParam] UnlikePDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time thatPDOStatement::execute()is called.
So, for example:
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindParam(':sex', $sex); // use bindParam to bind the variable $sex = 'female'; $s->execute(); // executed with WHERE sex = 'female' or
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindValue(':sex', $sex); // use bindValue to bind the variable's value $sex = 'female'; $s->execute(); // executed with WHERE sex = 'male'
Here are some I can think about :
bindParam, you can only pass variables ; not valuesbindValue, you can pass both (values, obviously, and variables)bindParam works only with variables because it allows parameters to be given as input/output, by "reference" (and a value is not a valid "reference" in PHP) : it is useful with drivers that (quoting the manual) : support the invocation of stored procedures that return data as output parameters, and some also as input/output parameters that both send in data and are updated to receive it.
With some DB engines, stored procedures can have parameters that can be used for both input (giving a value from PHP to the procedure) and ouput (returning a value from the stored proc to PHP) ; to bind those parameters, you've got to use bindParam, and not bindValue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With