Skip to content
112 changes: 112 additions & 0 deletions bin/functionMetadata_original.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,118 @@
'link' => ['hasSideEffects' => true],
'mkdir' => ['hasSideEffects' => true],
'move_uploaded_file' => ['hasSideEffects' => true],
'mysqli_affected_rows' => ['hasSideEffects' => true],
'mysqli_autocommit' => ['hasSideEffects' => true],
'mysqli_begin_transaction' => ['hasSideEffects' => true],
'mysqli_bind_param' => ['hasSideEffects' => true],
'mysqli_bind_result' => ['hasSideEffects' => true],
'mysqli_change_user' => ['hasSideEffects' => true],
'mysqli_character_set_name' => ['hasSideEffects' => true],
'mysqli_client_encoding' => ['hasSideEffects' => true],
'mysqli_close' => ['hasSideEffects' => true],
'mysqli_commit' => ['hasSideEffects' => true],
'mysqli_connect' => ['hasSideEffects' => true],
'mysqli_connect_errno' => ['hasSideEffects' => true],
'mysqli_connect_error' => ['hasSideEffects' => true],
'mysqli_data_seek' => ['hasSideEffects' => true],
'mysqli_debug' => ['hasSideEffects' => true],
'mysqli_dump_debug_info' => ['hasSideEffects' => true],
'mysqli_errno' => ['hasSideEffects' => true],
'mysqli_error' => ['hasSideEffects' => true],
'mysqli_error_list' => ['hasSideEffects' => true],
'mysqli_escape_string' => ['hasSideEffects' => true],
'mysqli_execute' => ['hasSideEffects' => true],
'mysqli_execute_query' => ['hasSideEffects' => true],
'mysqli_fetch' => ['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_lengths' => ['hasSideEffects' => true],
'mysqli_fetch_object' => ['hasSideEffects' => true],
'mysqli_fetch_row' => ['hasSideEffects' => true],
'mysqli_field_count' => ['hasSideEffects' => true],
'mysqli_field_seek' => ['hasSideEffects' => true],
'mysqli_field_tell' => ['hasSideEffects' => true],
'mysqli_free_result' => ['hasSideEffects' => true],
'mysqli_get_cache_stats' => ['hasSideEffects' => true],
'mysqli_get_charset' => ['hasSideEffects' => true],
'mysqli_get_client_info' => ['hasSideEffects' => true],
'mysqli_get_client_stats' => ['hasSideEffects' => true],
'mysqli_get_client_version' => ['hasSideEffects' => true],
'mysqli_get_connection_stats' => ['hasSideEffects' => true],
'mysqli_get_host_info' => ['hasSideEffects' => true],
'mysqli_get_links_stats' => ['hasSideEffects' => true],
'mysqli_get_metadata' => ['hasSideEffects' => true],
'mysqli_get_proto_info' => ['hasSideEffects' => true],
'mysqli_get_server_info' => ['hasSideEffects' => true],
'mysqli_get_server_version' => ['hasSideEffects' => true],
'mysqli_get_warnings' => ['hasSideEffects' => true],
'mysqli_info' => ['hasSideEffects' => true],
'mysqli_init' => ['hasSideEffects' => true],
'mysqli_insert_id' => ['hasSideEffects' => true],
'mysqli_kill' => ['hasSideEffects' => true],
'mysqli_more_results' => ['hasSideEffects' => true],
'mysqli_multi_query' => ['hasSideEffects' => true],
'mysqli_next_result' => ['hasSideEffects' => true],
'mysqli_options' => ['hasSideEffects' => true],
'mysqli_param_count' => ['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_escape_string' => ['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_send_long_data' => ['hasSideEffects' => true],
'mysqli_set_charset' => ['hasSideEffects' => true],
'mysqli_set_local_infile_default' => ['hasSideEffects' => true],
'mysqli_set_local_infile_handler' => ['hasSideEffects' => true],
'mysqli_set_opt' => ['hasSideEffects' => true],
'mysqli_sqlstate' => ['hasSideEffects' => true],
'mysqli_ssl_set' => ['hasSideEffects' => true],
'mysqli_stat' => ['hasSideEffects' => true],
'mysqli_stmt_affected_rows' => ['hasSideEffects' => true],
'mysqli_stmt_attr_get' => ['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_errno' => ['hasSideEffects' => true],
'mysqli_stmt_error' => ['hasSideEffects' => true],
'mysqli_stmt_error_list' => ['hasSideEffects' => true],
'mysqli_stmt_execute' => ['hasSideEffects' => true],
'mysqli_stmt_fetch' => ['hasSideEffects' => true],
'mysqli_stmt_field_count' => ['hasSideEffects' => true],
'mysqli_stmt_free_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_warnings' => ['hasSideEffects' => true],
'mysqli_stmt_init' => ['hasSideEffects' => true],
'mysqli_stmt_insert_id' => ['hasSideEffects' => true],
'mysqli_stmt_more_results' => ['hasSideEffects' => true],
'mysqli_stmt_next_result' => ['hasSideEffects' => true],
'mysqli_stmt_num_rows' => ['hasSideEffects' => true],
'mysqli_stmt_param_count' => ['hasSideEffects' => true],
'mysqli_stmt_prepare' => ['hasSideEffects' => true],
'mysqli_stmt_reset' => ['hasSideEffects' => true],
'mysqli_stmt_result_metadata' => ['hasSideEffects' => true],
'mysqli_stmt_send_long_data' => ['hasSideEffects' => true],
'mysqli_stmt_sqlstate' => ['hasSideEffects' => true],
'mysqli_stmt_store_result' => ['hasSideEffects' => true],
'mysqli_store_result' => ['hasSideEffects' => true],
'mysqli_thread_id' => ['hasSideEffects' => true],
'mysqli_thread_safe' => ['hasSideEffects' => true],
'mysqli_use_result' => ['hasSideEffects' => true],
'mysqli_warning_count' => ['hasSideEffects' => true],
'ob_clean' => ['hasSideEffects' => true],
'ob_end_clean' => ['hasSideEffects' => true],
'ob_end_flush' => ['hasSideEffects' => true],
Expand Down
112 changes: 112 additions & 0 deletions resources/functionMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -1392,6 +1392,118 @@
'msgfmt_parse_message' => ['hasSideEffects' => false],
'mt_getrandmax' => ['hasSideEffects' => false],
'mt_rand' => ['hasSideEffects' => true],
'mysqli_affected_rows' => ['hasSideEffects' => true],
'mysqli_autocommit' => ['hasSideEffects' => true],
'mysqli_begin_transaction' => ['hasSideEffects' => true],
'mysqli_bind_param' => ['hasSideEffects' => true],
'mysqli_bind_result' => ['hasSideEffects' => true],
'mysqli_change_user' => ['hasSideEffects' => true],
'mysqli_character_set_name' => ['hasSideEffects' => true],
'mysqli_client_encoding' => ['hasSideEffects' => true],
'mysqli_close' => ['hasSideEffects' => true],
'mysqli_commit' => ['hasSideEffects' => true],
'mysqli_connect' => ['hasSideEffects' => true],
'mysqli_connect_errno' => ['hasSideEffects' => true],
'mysqli_connect_error' => ['hasSideEffects' => true],
'mysqli_data_seek' => ['hasSideEffects' => true],
'mysqli_debug' => ['hasSideEffects' => true],
'mysqli_dump_debug_info' => ['hasSideEffects' => true],
'mysqli_errno' => ['hasSideEffects' => true],
'mysqli_error' => ['hasSideEffects' => true],
'mysqli_error_list' => ['hasSideEffects' => true],
'mysqli_escape_string' => ['hasSideEffects' => true],
'mysqli_execute' => ['hasSideEffects' => true],
'mysqli_execute_query' => ['hasSideEffects' => true],
'mysqli_fetch' => ['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_lengths' => ['hasSideEffects' => true],
'mysqli_fetch_object' => ['hasSideEffects' => true],
'mysqli_fetch_row' => ['hasSideEffects' => true],
'mysqli_field_count' => ['hasSideEffects' => true],
'mysqli_field_seek' => ['hasSideEffects' => true],
'mysqli_field_tell' => ['hasSideEffects' => true],
'mysqli_free_result' => ['hasSideEffects' => true],
'mysqli_get_cache_stats' => ['hasSideEffects' => true],
'mysqli_get_charset' => ['hasSideEffects' => true],
'mysqli_get_client_info' => ['hasSideEffects' => true],
'mysqli_get_client_stats' => ['hasSideEffects' => true],
'mysqli_get_client_version' => ['hasSideEffects' => true],
'mysqli_get_connection_stats' => ['hasSideEffects' => true],
'mysqli_get_host_info' => ['hasSideEffects' => true],
'mysqli_get_links_stats' => ['hasSideEffects' => true],
'mysqli_get_metadata' => ['hasSideEffects' => true],
'mysqli_get_proto_info' => ['hasSideEffects' => true],
'mysqli_get_server_info' => ['hasSideEffects' => true],
'mysqli_get_server_version' => ['hasSideEffects' => true],
'mysqli_get_warnings' => ['hasSideEffects' => true],
'mysqli_info' => ['hasSideEffects' => true],
'mysqli_init' => ['hasSideEffects' => true],
'mysqli_insert_id' => ['hasSideEffects' => true],
'mysqli_kill' => ['hasSideEffects' => true],
'mysqli_more_results' => ['hasSideEffects' => true],
'mysqli_multi_query' => ['hasSideEffects' => true],
'mysqli_next_result' => ['hasSideEffects' => true],
'mysqli_options' => ['hasSideEffects' => true],
'mysqli_param_count' => ['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_escape_string' => ['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_send_long_data' => ['hasSideEffects' => true],
'mysqli_set_charset' => ['hasSideEffects' => true],
'mysqli_set_local_infile_default' => ['hasSideEffects' => true],
'mysqli_set_local_infile_handler' => ['hasSideEffects' => true],
'mysqli_set_opt' => ['hasSideEffects' => true],
'mysqli_sqlstate' => ['hasSideEffects' => true],
'mysqli_ssl_set' => ['hasSideEffects' => true],
'mysqli_stat' => ['hasSideEffects' => true],
'mysqli_stmt_affected_rows' => ['hasSideEffects' => true],
'mysqli_stmt_attr_get' => ['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_errno' => ['hasSideEffects' => true],
'mysqli_stmt_error' => ['hasSideEffects' => true],
'mysqli_stmt_error_list' => ['hasSideEffects' => true],
'mysqli_stmt_execute' => ['hasSideEffects' => true],
'mysqli_stmt_fetch' => ['hasSideEffects' => true],
'mysqli_stmt_field_count' => ['hasSideEffects' => true],
'mysqli_stmt_free_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_result' => ['hasSideEffects' => true],
'mysqli_stmt_get_warnings' => ['hasSideEffects' => true],
'mysqli_stmt_init' => ['hasSideEffects' => true],
'mysqli_stmt_insert_id' => ['hasSideEffects' => true],
'mysqli_stmt_more_results' => ['hasSideEffects' => true],
'mysqli_stmt_next_result' => ['hasSideEffects' => true],
'mysqli_stmt_num_rows' => ['hasSideEffects' => true],
'mysqli_stmt_param_count' => ['hasSideEffects' => true],
'mysqli_stmt_prepare' => ['hasSideEffects' => true],
'mysqli_stmt_reset' => ['hasSideEffects' => true],
'mysqli_stmt_result_metadata' => ['hasSideEffects' => true],
'mysqli_stmt_send_long_data' => ['hasSideEffects' => true],
'mysqli_stmt_sqlstate' => ['hasSideEffects' => true],
'mysqli_stmt_store_result' => ['hasSideEffects' => true],
'mysqli_store_result' => ['hasSideEffects' => true],
'mysqli_thread_id' => ['hasSideEffects' => true],
'mysqli_thread_safe' => ['hasSideEffects' => true],
'mysqli_use_result' => ['hasSideEffects' => true],
'mysqli_warning_count' => ['hasSideEffects' => true],
'net_get_interfaces' => ['hasSideEffects' => false],
'ngettext' => ['hasSideEffects' => false],
'nl2br' => ['hasSideEffects' => false],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -384,4 +384,11 @@ public function testBug10305(): void
]);
}

public function testBug14473(): void
{
$this->treatPhpDocTypesAsCertain = true;

$this->analyse([__DIR__ . '/data/bug-14473.php'], []);
}

}
27 changes: 27 additions & 0 deletions tests/PHPStan/Rules/Comparison/data/bug-14473.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php declare(strict_types = 1);

namespace Bug14473;

$link = mysqli_connect('host', 'user', 'pass', 'database') or die('Could not connect: ' . mysqli_connect_error());

// (assume long-running code that can cause the connection to time out)

$link = mysqli_connect('host', 'user', 'pass', 'database') or die('Could not reconnect: ' . mysqli_connect_error());

// okay, so let's make certain that the connection is closed
mysqli_close($link);

$link = mysqli_connect('host', 'user', 'pass', 'database') or die('Could not reconnect: ' . mysqli_connect_error());

// close it and destroy the variable
mysqli_close($link);
unset($link);

$link = mysqli_connect('host', 'user', 'pass', 'database') or die('Could not reconnect: ' . mysqli_connect_error());

// close, destroy ...
mysqli_close($link);
unset($link);

// ... and assign to a different variable
$newLink = mysqli_connect('host', 'user', 'pass', 'database') or die('Could not reconnect: ' . mysqli_connect_error());
Loading