Hi Dorin,

On 15/05/2017 18:22, Dorin Marcoci wrote:
> Currently PDOStatement::bindValue is declared as
> 
> public bool PDOStatement::bindValue ( mixed $parameter , mixed $value [, int
> $data_type = PDO::PARAM_STR ] )
> 
> where third parameter is data type, string type as default.
> 
> It may be useful in terms of providing meta info and handle it accordingly,
> like quote, cast or do some additional stuff.
> 
> But there are DBMSes where this "feature" is more a burden than a helper.

Please elaborate.

> It's because after PDO::prepare, driver and server already knows all
> statement parameters and expected types.
> 
> Yes, it can be "forced", saying to pass for a integer parameter a string
> value, server will convert it to required type.
> 
> It is convenient in most cases to pass them as strings, for example by
> simply assign all params in a cycle before execute.

The thing is: the server (with non-emulated prepares) knows the data
type it's expecting. PHP has no knowledge of it, so you are expected to
do so if the default (string) is not ok.


> But when implementing FB Boolean data type parameters and doing ->bindValue
> ('bool_param', false) I get an empty string internally.
> 
> Yes, true ZVAL is converted as string as '1', but false as an empty string,
> not so consistent here ;)

That's not true.

$p = new PDO("pgsql:dbname=postgres");
$p->prepare("SELECT ?::bool");
$s->bindValue(1, false);
$s->execute();
var_dump($s->fetchColumn());'

outputs:

bool(false)

What are you referring to?


> That's why I think, it will be great to have a special type like
> PDO::PARAM_AUTO and a config flag to set it as default instead of PARAM_STR.

Config flags are evil as it's one more thing you'd need to be aware of
and could change depending on the environment you run your script or
library on.


Cheers
-- 
Matteo Beccati

Development & Consulting - http://www.beccati.com/

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to