Re: [PDO] Convert types for bound parameters (next try)

[email protected] (Christopher Jones) Tue, 15 Jun 2010 10:40:39 -0700
Newsgroups php.pdo
Message-ID <[email protected]>
Oskar,

Where's your RFC located?

Thanks,

Chris

PS That's a strong hint.

Oskar Eisemuth wrote:
> Hello
> 
> As no one really was against fixing PDO type converting behavior I 
> started to write a patch to see if the concept can be introduced into 
> PDO core.
> 
> The new code that I want to introduce to really_register_bound_param, - 
> here PDO already tries to fix some problems already- , will convert 
> PDO_PARAM_* always to right type via convert_to_*
> 
> The current differences, as soon as the parameter is marked 
> PDO_PARAM_INPUT_OUTPUT the input isn't changed anymore and every ZVAL is 
> separated via SEPARATE_ZVAL_IF_NOT_REF. I don't think PDO should magical 
> change the type of a parameter, or I am wrong?
> 
> Still there are some questions:
> ------------------------
> PDO_PARAM_BOOL
> ------------------------
> I have written two additional concept code paths for PDO_PARAM_BOOL now:
> 
> a) Strict SQL:
> Only accept 1/0, true/false y/n, t/f, anything other will result into an 
> warning and setting to boolean false. (case insensitive)
> 
> b) Lazy SQL: Anything that is a string is boolean true except if it's a 
> empry string, "0", "false", "False", "FALSE", "f", "F", "No", "no", "n" 
> or "N".
> 
> c) convert_to_boolean
> May result in problems with any driver that passes the string data to 
> the db and using strings.As example bindValue(1, "FALSE", 
> PDO::PARAM_BOOL) would change to boolean true.
> 
> Postgre:
> Using c) may be a BC break with postgre sql, only a) and b) would mimic 
> the old behavior. The question is really here how many people use a 
> string with PDO::PARAM_BOOL?
> 
> MySQL:
> Broken by design, PDO_PARAM_* is always PDO_PARAM_ZVAL currently. I 
> think that would be a bug fix.
> 
> SQLite:
> You will lose the ability to pass integers as PDO_PARAM_BOOL. Not really 
> dramatic...
> 
> My favorite is convert_to_boolean as it has the least code to maintain 
> and is natural to PHP.
> 
> ------------------------
> PDO_PARAM_INT:
> ------------------------
> 
> Always convert_to_long, we may get a problem here as the php datatype 
> may be smaller as the database one. On the other hand pdo_param_type says:
> 
>     /* int as in long (the php native int type).
>      * If you mark a column as an int, PDO expects get_col to return
>      * a pointer to a long */
>     PDO_PARAM_INT,
> 
> Here we have disagreement between the code documentation and the manual.
> And  http://www.php.net/~wez/pdo/pdo-spec.html#drivers.stmt. is empty. Wez?
> 
> Fixing the whole problem in PDO Core may result in copied zvals but 
> clearly pave the route to a more defined standard between databases...
> 
> ---
> Oskar Eisemuth
> 

-- 
Email: [email protected]
Tel:  +1 650 506 8630
Blog:  http://blogs.oracle.com/opal/
Free PHP Book: http://tinyurl.com/ugpomhome