mirror of
https://github.com/php/php-src.git
synced 2026-04-02 21:52:36 +02:00
Instead of requiring the type to be determined in advance by the describer function and then requiring get_col to return a buffer of appropriate type, allow get_col to return an arbitrary zval. See UPGRADING.INTERNALS for a more detailed description of the change. This makes the result fetching simpler, more efficient and more flexible. The general possibility already existed via the special PDO_PARAM_ZVAL type, but the usage was very inconvenient and/or inefficient. Now it's possible to easily implement behavior like "return int if it fits, otherwise string" and to avoid any kind of complex management of temporary buffers. This also fixes bug #40913 (our second highest voted bug of all time, for some reason). PARAM_LOB result bindings will now consistently return a stream resource, independently of the used database driver. I've tried my best to update all PDO drivers for this change, but some of the changes may be broken, as I cannot test or even build some of these drivers (in particular PDO dblib and PDO oci). Fixes are appreciated -- a working CI setup would be even more appreciated ;)
51 lines
1.2 KiB
PHP
51 lines
1.2 KiB
PHP
--TEST--
|
|
PDO PgSQL PDOStatement::debugDumpParams() with emulated prepares
|
|
--SKIPIF--
|
|
<?php
|
|
if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
|
|
require __DIR__ . '/config.inc';
|
|
require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
|
|
PDOTest::skip();
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
|
|
$db = PDOTest::test_factory(__DIR__ . '/common.phpt');
|
|
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
|
|
|
|
$stmt = $db->prepare('SELECT :bool, :int, :string, :null');
|
|
$stmt->bindValue(':bool', true, PDO::PARAM_BOOL);
|
|
$stmt->bindValue(':int', 123, PDO::PARAM_INT);
|
|
$stmt->bindValue(':string', 'foo', PDO::PARAM_STR);
|
|
$stmt->bindValue(':null', null, PDO::PARAM_NULL);
|
|
$stmt->execute();
|
|
|
|
var_dump($stmt->debugDumpParams());
|
|
|
|
?>
|
|
--EXPECT--
|
|
SQL: [34] SELECT :bool, :int, :string, :null
|
|
Sent SQL: [28] SELECT 't', 123, 'foo', NULL
|
|
Params: 4
|
|
Key: Name: [5] :bool
|
|
paramno=-1
|
|
name=[5] ":bool"
|
|
is_param=1
|
|
param_type=3
|
|
Key: Name: [4] :int
|
|
paramno=-1
|
|
name=[4] ":int"
|
|
is_param=1
|
|
param_type=2
|
|
Key: Name: [7] :string
|
|
paramno=-1
|
|
name=[7] ":string"
|
|
is_param=1
|
|
param_type=3
|
|
Key: Name: [5] :null
|
|
paramno=-1
|
|
name=[5] ":null"
|
|
is_param=1
|
|
param_type=0
|
|
NULL
|