From b38a50bb4f5050d647c49d34b52f095b6ca5c787 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 7 Nov 2006 17:57:37 +0000 Subject: [PATCH] MFB: Fixed bug #39398 (Booleans are not automatically translated to integers). --- ext/pdo/pdo_stmt.c | 4 ++++ ext/pdo/tests/bug_39398.phpt | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 ext/pdo/tests/bug_39398.phpt diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index b035783246..bf4ae99781 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -278,6 +278,10 @@ static int really_register_bound_param(struct pdo_bound_param_data *param, pdo_s if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_STR && param->max_value_len <= 0 && ! ZVAL_IS_NULL(param->parameter)) { convert_to_string(param->parameter); + } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) { + convert_to_long(param->parameter); + } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_BOOL && Z_TYPE_P(param->parameter) == IS_LONG) { + convert_to_boolean(param->parameter); } param->stmt = stmt; diff --git a/ext/pdo/tests/bug_39398.phpt b/ext/pdo/tests/bug_39398.phpt new file mode 100644 index 0000000000..7b81747cf3 --- /dev/null +++ b/ext/pdo/tests/bug_39398.phpt @@ -0,0 +1,35 @@ +--TEST-- +PDO Common: PHP Bug #39398: Booleans are not automatically translated to integers +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE test (test INT)"); + +$boolean = 1; +$stmt = $db->prepare('INSERT INTO test VALUES (:boolean)'); +$stmt->bindValue(':boolean', isset($boolean), PDO::PARAM_INT); +$stmt->execute(); + +var_dump($db->query("SELECT * FROM test")->fetchAll(PDO::FETCH_ASSOC)); +?> +===DONE=== +--EXPECT-- +array(1) { + [0]=> + array(1) { + ["test"]=> + string(1) "1" + } +} +===DONE=== -- 2.50.1