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

From: Date: Tue, 15 Jun 2010 17:40:39 +0000
Subject: Re: [PDO] Convert types for bound parameters (next try)
References: 1  Groups: php.pdo 
Request: Send a blank email to pdo+get-458@lists.php.net to get a copy of this message
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: christopher.jones@oracle.com Tel: +1 650 506 8630 Blog: http://blogs.oracle.com/opal/ Free PHP Book: http://tinyurl.com/ugpomhome

« previous php.pdo (#458) next »