. Fixed bug #76815 (PDOStatement cannot be GCed/closeCursor-ed when a
PROCEDURE resultset SIGNAL). (Nikita)
. Fixed bug #79872 (Can't execute query with pending result sets). (Nikita)
+ . Fixed bug #79131 (PDO does not throw an exception when parameter values are
+ missing). (Nikita)
- Phar:
. Fixed bug #73809 (Phar Zip parse crash - mmap fail). (cmb)
* a reference to param, as it resides in transient storage only
* at this time. */
if (stmt->methods->param_hook) {
- if (!stmt->methods->param_hook(stmt, param, PDO_PARAM_EVT_NORMALIZE
- )) {
+ if (!stmt->methods->param_hook(stmt, param, PDO_PARAM_EVT_NORMALIZE)) {
+ PDO_HANDLE_STMT_ERR();
if (param->name) {
zend_string_release_ex(param->name, 0);
param->name = NULL;
/* tell the driver we just created a parameter */
if (stmt->methods->param_hook) {
- if (!stmt->methods->param_hook(stmt, pparam, PDO_PARAM_EVT_ALLOC
- )) {
+ if (!stmt->methods->param_hook(stmt, pparam, PDO_PARAM_EVT_ALLOC)) {
+ PDO_HANDLE_STMT_ERR();
/* undo storage allocation; the hash will free the parameter
* name if required */
if (pparam->name) {
}
if (ret && !dispatch_param_event(stmt, PDO_PARAM_EVT_EXEC_POST)) {
+ PDO_HANDLE_STMT_ERR();
RETURN_FALSE;
}
$db = MySQLPDOTest::factory();
$db->exec('DROP TABLE IF EXISTS test');
?>
---EXPECT--
+--EXPECTF--
array(1) {
[0]=>
array(2) {
}
}
now the same with native PS
+
+Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d
[005] Execute has failed, 'HY093' array (
0 => 'HY093',
1 => NULL,
$db = MySQLPDOTest::factory();
$db->exec('DROP TABLE IF EXISTS test');
?>
---EXPECT--
+--EXPECTF--
+Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d
[003] Execute has failed, 'HY093' array (
0 => 'HY093',
1 => NULL,
ZEND_ATOL(param->paramno, namevar + 1);
param->paramno--;
} else {
- pdo_raise_impl_error(stmt->dbh, stmt, "HY093", ZSTR_VAL(param->name));
+ pdo_pgsql_error_stmt_msg(
+ stmt, PGRES_FATAL_ERROR, "HY093", ZSTR_VAL(param->name));
return 0;
}
}
return 1;
}
if (!zend_hash_index_exists(stmt->bound_param_map, param->paramno)) {
- pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined");
+ pdo_pgsql_error_stmt_msg(
+ stmt, PGRES_FATAL_ERROR, "HY093", "parameter was not defined");
return 0;
}
case PDO_PARAM_EVT_EXEC_POST:
#define pdo_pgsql_error(d,e,z) _pdo_pgsql_error(d, NULL, e, z, NULL, __FILE__, __LINE__)
#define pdo_pgsql_error_msg(d,e,m) _pdo_pgsql_error(d, NULL, e, NULL, m, __FILE__, __LINE__)
#define pdo_pgsql_error_stmt(s,e,z) _pdo_pgsql_error(s->dbh, s, e, z, NULL, __FILE__, __LINE__)
-#define pdo_pgsql_error_stmt_msg(s,e,m) _pdo_pgsql_error(s->dbh, s, e, NULL, m, __FILE__, __LINE__)
+#define pdo_pgsql_error_stmt_msg(stmt, e, sqlstate, msg) \
+ _pdo_pgsql_error(stmt->dbh, stmt, e, sqlstate, msg, __FILE__, __LINE__)
extern const struct pdo_stmt_methods pgsql_stmt_methods;
echo "Done\n";
?>
--EXPECTF--
-Warning: PDOStatement::bindValue(): SQLSTATE[HY093]: Invalid parameter number: :test in %sbug36727.php on line %d
+Warning: PDOStatement::bindValue(): SQLSTATE[HY093]: Invalid parameter number: 7 :test in %s on line %d
bool(false)
Done
?>
--EXPECT--
-SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
+SQLSTATE[HY093]: Invalid parameter number: 7 parameter was not defined
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
?>
--EXPECTF--
-Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in %sbug71573.php on line %d
+Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: 7 parameter was not defined in %s on line %d