Merge branch 'PHP-7.4' into PHP-8.0

* PHP-7.4:
  Fix #44643: bound parameters ignore explicit type definitions
This commit is contained in:
Christoph M. Becker 2021-05-12 13:45:41 +02:00
commit 63c558bcbb
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
3 changed files with 35 additions and 3 deletions

3
NEWS
View file

@ -28,6 +28,9 @@ PHP NEWS
. Fixed bug #81015 (Opcache optimization assumes wrong part of ternary
operator in if-condition). (Nikita)
- PDO_ODBC:
. Fixed bug #44643 (bound parameters ignore explicit type definitions). (cmb)
- PDO_pgsql:
. Reverted bug fix for #80892 (PDO::PARAM_INT is treated the same as
PDO::PARAM_STR). (Matteo)

View file

@ -321,9 +321,16 @@ static int odbc_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *p
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
/* MS Access, for instance, doesn't support SQLDescribeParam,
* so we need to guess */
sqltype = PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB ?
SQL_LONGVARBINARY :
SQL_LONGVARCHAR;
switch (PDO_PARAM_TYPE(param->param_type)) {
case PDO_PARAM_INT:
sqltype = SQL_INTEGER;
break;
case PDO_PARAM_LOB:
sqltype = SQL_LONGVARBINARY;
break;
default:
sqltype = SQL_LONGVARCHAR;
}
precision = 4000;
scale = 5;
nullable = 1;

View file

@ -0,0 +1,22 @@
--TEST--
Bug #44643 (bound parameters ignore explicit type definitions)
--SKIPIF--
<?php
if (!extension_loaded('pdo_odbc')) die('skip pdo_odbc extension not available');
require 'ext/pdo/tests/pdo_test.inc';
PDOTest::skip();
?>
--FILE--
<?php
require 'ext/pdo/tests/pdo_test.inc';
$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
$sql = "SELECT * FROM (SELECT 'test' = :id1) a WHERE a.test = :id2";
$stmt = $db->prepare($sql);
$id1 = 1;
$stmt->bindParam(':id1', $id1, PDO::PARAM_INT);
$id2 = 1;
$stmt->bindParam(':id2', $id2, PDO::PARAM_INT);
var_dump($stmt->execute());
?>
--EXPECT--
bool(true)