Skip to content
Prev Previous commit
Next Next commit
Mark all side-effectful mysqli_ functions in function metadata
In response to review feedback: many other mysqli_ functions beyond
mysqli_connect have side effects (network I/O, state mutation, cursor
advancement) and were defaulting to hasSideEffects=maybe. This could
cause the same false positive as phpstan/phpstan#14473 for any of these
functions when used with the `or die()` pattern.

Added 56 additional mysqli_ functions covering connection management,
query execution, transactions, result fetching, cursor positioning,
prepared statements, and administrative operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
  • Loading branch information
phpstan-bot and claude committed Apr 15, 2026
commit 861bdde22c211dc7d15da939f309f65df9ffe110
56 changes: 56 additions & 0 deletions bin/functionMetadata_original.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,63 @@
'link' => ['hasSideEffects' => true],
'mkdir' => ['hasSideEffects' => true],
'move_uploaded_file' => ['hasSideEffects' => true],
'mysqli_autocommit' => ['hasSideEffects' => true],
'mysqli_begin_transaction' => ['hasSideEffects' => true],
'mysqli_change_user' => ['hasSideEffects' => true],
'mysqli_close' => ['hasSideEffects' => true],
'mysqli_commit' => ['hasSideEffects' => true],
'mysqli_connect' => ['hasSideEffects' => true],
'mysqli_data_seek' => ['hasSideEffects' => true],
'mysqli_debug' => ['hasSideEffects' => true],
'mysqli_dump_debug_info' => ['hasSideEffects' => true],
'mysqli_fetch_all' => ['hasSideEffects' => true],
'mysqli_fetch_array' => ['hasSideEffects' => true],
'mysqli_fetch_assoc' => ['hasSideEffects' => true],
'mysqli_fetch_column' => ['hasSideEffects' => true],
'mysqli_fetch_field' => ['hasSideEffects' => true],
'mysqli_fetch_field_direct' => ['hasSideEffects' => true],
'mysqli_fetch_object' => ['hasSideEffects' => true],
'mysqli_fetch_row' => ['hasSideEffects' => true],
'mysqli_field_seek' => ['hasSideEffects' => true],
'mysqli_free_result' => ['hasSideEffects' => true],
'mysqli_init' => ['hasSideEffects' => true],
'mysqli_kill' => ['hasSideEffects' => true],
'mysqli_multi_query' => ['hasSideEffects' => true],
'mysqli_next_result' => ['hasSideEffects' => true],
'mysqli_options' => ['hasSideEffects' => true],
'mysqli_ping' => ['hasSideEffects' => true],
'mysqli_poll' => ['hasSideEffects' => true],
'mysqli_prepare' => ['hasSideEffects' => true],
'mysqli_query' => ['hasSideEffects' => true],
'mysqli_real_connect' => ['hasSideEffects' => true],
'mysqli_real_query' => ['hasSideEffects' => true],
'mysqli_reap_async_query' => ['hasSideEffects' => true],
'mysqli_refresh' => ['hasSideEffects' => true],
'mysqli_release_savepoint' => ['hasSideEffects' => true],
'mysqli_report' => ['hasSideEffects' => true],
'mysqli_rollback' => ['hasSideEffects' => true],
'mysqli_savepoint' => ['hasSideEffects' => true],
'mysqli_select_db' => ['hasSideEffects' => true],
'mysqli_set_charset' => ['hasSideEffects' => true],
'mysqli_ssl_set' => ['hasSideEffects' => true],
'mysqli_stat' => ['hasSideEffects' => true],
'mysqli_stmt_attr_set' => ['hasSideEffects' => true],
'mysqli_stmt_bind_param' => ['hasSideEffects' => true],
'mysqli_stmt_bind_result' => ['hasSideEffects' => true],
'mysqli_stmt_close' => ['hasSideEffects' => true],
'mysqli_stmt_data_seek' => ['hasSideEffects' => true],
'mysqli_stmt_execute' => ['hasSideEffects' => true],
'mysqli_stmt_fetch' => ['hasSideEffects' => true],
'mysqli_stmt_free_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_result' => ['hasSideEffects' => true],
'mysqli_stmt_init' => ['hasSideEffects' => true],
'mysqli_stmt_next_result' => ['hasSideEffects' => true],
'mysqli_stmt_prepare' => ['hasSideEffects' => true],
'mysqli_stmt_reset' => ['hasSideEffects' => true],
'mysqli_stmt_send_long_data' => ['hasSideEffects' => true],
'mysqli_stmt_store_result' => ['hasSideEffects' => true],
'mysqli_store_result' => ['hasSideEffects' => true],
'mysqli_use_result' => ['hasSideEffects' => true],
'ob_clean' => ['hasSideEffects' => true],
'ob_end_clean' => ['hasSideEffects' => true],
'ob_end_flush' => ['hasSideEffects' => true],
Expand Down
56 changes: 56 additions & 0 deletions resources/functionMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -1392,7 +1392,63 @@
'msgfmt_parse_message' => ['hasSideEffects' => false],
'mt_getrandmax' => ['hasSideEffects' => false],
'mt_rand' => ['hasSideEffects' => true],
'mysqli_autocommit' => ['hasSideEffects' => true],
'mysqli_begin_transaction' => ['hasSideEffects' => true],
'mysqli_change_user' => ['hasSideEffects' => true],
'mysqli_close' => ['hasSideEffects' => true],
'mysqli_commit' => ['hasSideEffects' => true],
'mysqli_connect' => ['hasSideEffects' => true],
'mysqli_data_seek' => ['hasSideEffects' => true],
'mysqli_debug' => ['hasSideEffects' => true],
'mysqli_dump_debug_info' => ['hasSideEffects' => true],
'mysqli_fetch_all' => ['hasSideEffects' => true],
'mysqli_fetch_array' => ['hasSideEffects' => true],
'mysqli_fetch_assoc' => ['hasSideEffects' => true],
'mysqli_fetch_column' => ['hasSideEffects' => true],
'mysqli_fetch_field' => ['hasSideEffects' => true],
'mysqli_fetch_field_direct' => ['hasSideEffects' => true],
'mysqli_fetch_object' => ['hasSideEffects' => true],
'mysqli_fetch_row' => ['hasSideEffects' => true],
'mysqli_field_seek' => ['hasSideEffects' => true],
'mysqli_free_result' => ['hasSideEffects' => true],
'mysqli_init' => ['hasSideEffects' => true],
'mysqli_kill' => ['hasSideEffects' => true],
'mysqli_multi_query' => ['hasSideEffects' => true],
'mysqli_next_result' => ['hasSideEffects' => true],
'mysqli_options' => ['hasSideEffects' => true],
'mysqli_ping' => ['hasSideEffects' => true],
'mysqli_poll' => ['hasSideEffects' => true],
'mysqli_prepare' => ['hasSideEffects' => true],
'mysqli_query' => ['hasSideEffects' => true],
'mysqli_real_connect' => ['hasSideEffects' => true],
'mysqli_real_query' => ['hasSideEffects' => true],
'mysqli_reap_async_query' => ['hasSideEffects' => true],
'mysqli_refresh' => ['hasSideEffects' => true],
'mysqli_release_savepoint' => ['hasSideEffects' => true],
'mysqli_report' => ['hasSideEffects' => true],
'mysqli_rollback' => ['hasSideEffects' => true],
'mysqli_savepoint' => ['hasSideEffects' => true],
'mysqli_select_db' => ['hasSideEffects' => true],
'mysqli_set_charset' => ['hasSideEffects' => true],
'mysqli_ssl_set' => ['hasSideEffects' => true],
'mysqli_stat' => ['hasSideEffects' => true],
'mysqli_stmt_attr_set' => ['hasSideEffects' => true],
'mysqli_stmt_bind_param' => ['hasSideEffects' => true],
'mysqli_stmt_bind_result' => ['hasSideEffects' => true],
'mysqli_stmt_close' => ['hasSideEffects' => true],
'mysqli_stmt_data_seek' => ['hasSideEffects' => true],
'mysqli_stmt_execute' => ['hasSideEffects' => true],
'mysqli_stmt_fetch' => ['hasSideEffects' => true],
'mysqli_stmt_free_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_result' => ['hasSideEffects' => true],
'mysqli_stmt_init' => ['hasSideEffects' => true],
'mysqli_stmt_next_result' => ['hasSideEffects' => true],
'mysqli_stmt_prepare' => ['hasSideEffects' => true],
'mysqli_stmt_reset' => ['hasSideEffects' => true],
'mysqli_stmt_send_long_data' => ['hasSideEffects' => true],
'mysqli_stmt_store_result' => ['hasSideEffects' => true],
'mysqli_store_result' => ['hasSideEffects' => true],
'mysqli_use_result' => ['hasSideEffects' => true],
'net_get_interfaces' => ['hasSideEffects' => false],
'ngettext' => ['hasSideEffects' => false],
'nl2br' => ['hasSideEffects' => false],
Expand Down
Loading