Re: PDO - Cannot retrieve warnings with emulated prepares disabled [message #183523 is a reply to message #183519] |
Tue, 29 October 2013 22:11 |
Thomas Mlynarczyk
Messages: 131 Registered: September 2010
Karma:
|
Senior Member |
|
|
Jerry Stuckle schrieb:
> Do you get a result from the 'Select 5 + "Five"'? If so, what is it?
Yes, I get a result -- see below. I did some more testing:
$pdo = new PDO( 'mysql:...', '...', '...' );
var_dump( $pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false ) );
var_dump( $stmt = $pdo->prepare( 'SELECT 5 + "Five"' ) );
var_dump( $stmt->execute() );
var_dump( $stmt->fetchAll( PDO::FETCH_ASSOC ) );
var_dump( $pdo->query( 'SHOW WARNINGS' )
->fetchAll( PDO::FETCH_ASSOC ) );
Return values with PDO::ATTR_EMULATE_PREPARES = false:
setAttribute -> true
prepare -> PDOStatement
execute -> true
fetchAll -> array( '5 + "Five"' => (float) 5 )
SHOW WARNINGS -> (empty array)
Return values with PDO::ATTR_EMULATE_PREPARES = true:
setAttribute -> true
prepare -> PDOStatement
execute -> true
fetchAll -> array( '5 + "Five"' => (string) '5' )
SHOW WARNINGS -> array with warning
Results are the same with PHP 5.4.8 and PHP 5.4.21. Note the different
return types of the value 5 -- float vs. string. This surprises me a
little -- why would the setting for emulation of prepared statements
influence the *returned* data?
> Also, what happens if you try "Select 5 + 'Five'"? (note different
> quoting).
No change.
> I'm beginning to think you've found a bug in the PDO extension, but I'm
> not sure (yet).
Hm. I tested with PHP 5.4.8 and 5.4.21 and it didn't work. But it
obviously worked with PHP 5.4.15 as both Thomas Lahn's and my own test
on a different server have shown. In both cases, MySQL 5.5 is involved
whereas my local system is still on MySQL 5.1.41. This leads me to think
that it's not (or at least not entirely) a PDO issue.
Greetings,
Thomas
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
|
|
|