Skip to content

Commit 518eb0c

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fixed error reporting in mysqli_stmt::__construct
2 parents e3e6e1e + 233f507 commit 518eb0c

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

ext/mysqli/mysqli.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -988,28 +988,32 @@ PHP_METHOD(mysqli_stmt, __construct)
988988
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!", &mysql_link, mysqli_link_class_entry, &statement, &statement_len) == FAILURE) {
989989
RETURN_THROWS();
990990
}
991-
992991
MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
993992

994993
stmt = (MY_STMT *) ecalloc(1, sizeof(MY_STMT));
995-
stmt->stmt = mysql_stmt_init(mysql->mysql);
996-
if (stmt->stmt && statement) {
997-
mysql_stmt_prepare(stmt->stmt, (char *)statement, statement_len);
998-
}
999994

1000-
if (!stmt->stmt) {
995+
if (!(stmt->stmt = mysql_stmt_init(mysql->mysql))) {
1001996
efree(stmt);
1002997
RETURN_FALSE;
1003998
}
999+
10041000
#ifndef MYSQLI_USE_MYSQLND
10051001
ZVAL_COPY(&stmt->link_handle, mysql_link);
10061002
#endif
10071003

10081004
mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));
10091005
mysqli_resource->ptr = (void *)stmt;
1010-
mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID;
1006+
mysqli_resource->status = MYSQLI_STATUS_INITIALIZED;
10111007

10121008
MYSQLI_REGISTER_RESOURCE_EX(mysqli_resource, getThis());
1009+
1010+
if (statement) {
1011+
if(mysql_stmt_prepare(stmt->stmt, statement, statement_len)) {
1012+
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
1013+
RETURN_FALSE;
1014+
}
1015+
mysqli_resource->status = MYSQLI_STATUS_VALID;
1016+
}
10131017
}
10141018

10151019
PHP_METHOD(mysqli_result, __construct)

ext/mysqli/tests/063.phpt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,18 @@ require_once('skipifconnectfailure.inc');
1616
$stmt->bind_result($foo);
1717
$stmt->fetch();
1818
$stmt->close();
19-
$mysql->close();
20-
2119
var_dump($foo);
20+
21+
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
22+
try {
23+
// an exception should be thrown from prepare (i.e. constructor) not from execute
24+
$stmt = new mysqli_stmt($mysql, "SELECT invalid FROM DUAL");
25+
} catch(mysqli_sql_exception $e) {
26+
echo $e->getMessage()."\n";
27+
}
28+
29+
$mysql->close();
2230
?>
2331
--EXPECT--
2432
string(3) "foo"
33+
Unknown column 'invalid' in 'field list'

0 commit comments

Comments
 (0)