Current Location: Home> Latest Articles> No warnings displayed when using mysqli::get_warnings()? How to troubleshoot the issue?

No warnings displayed when using mysqli::get_warnings()? How to troubleshoot the issue?

gitbox 2025-08-21
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This is a preamble or declaration section unrelated to the main article content. You can modify it as needed</span></span><span>
</span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">&#039;display_errors&#039;</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p><h2>Using <code>mysqli::</span>get_warnings<span>

After execution, call get_warnings() to check if there are any warnings.

2. Check when get_warnings() is called

You must call it immediately after executing the SQL statement, and before executing the next one. Otherwise, previous warning messages will be cleared.

3. Iterate through all warnings

Sometimes there may be multiple warnings, so you need to loop through them:


</span><span><span class="hljs-variable">$warn</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">get_warnings</span></span><span>();
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$warn</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">printf</span></span><span>(</span><span><span class="hljs-string">"Warning: %s, %s, %s\n"</span></span><span>, </span><span><span class="hljs-variable">$warn</span></span><span>->errno, </span><span><span class="hljs-variable">$warn</span></span><span>->sqlstate, </span><span><span class="hljs-variable">$warn</span></span><span>->message);
    </span><span><span class="hljs-variable">$warn</span></span><span> = </span><span><span class="hljs-variable">$warn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">next</span></span><span>();
}

4. Check MySQL server configuration

Make sure the server hasn’t disabled warning output. Check whether sql_mode has strict mode enabled, as certain modes may cause warnings to be treated as errors.

<span class="fun">SHOW VARIABLES LIKE </span><span><span>'sql_mode'</span></span><span>;</span>

5. Verify client encoding and data types

Mismatched encodings or incorrect field types can also trigger warnings. Ensure the database and client character sets match, and that field types are appropriate.

IV. Example code

&lt;?php
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}

</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"INSERT INTO test_table (varchar_column) VALUES (&#039;This is a string that exceeds the column length limit...&#039;)"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Execution failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}

</span><span><span class="hljs-variable">$warn</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">get_warnings</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$warn</span></span><span>) {
    </span><span><span class="hljs-keyword">do</span></span><span> {
        </span><span><span class="hljs-title function_ invoke__">printf</span></span><span>(</span><span><span class="hljs-string">"Warning: code %d, state %s, message %s\n"</span></span><span>, </span><span><span class="hljs-variable">$warn</span></span><span>->errno, </span><span><span class="hljs-variable">$warn</span></span><span>->sqlstate, </span><span><span class="hljs-variable">$warn</span></span><span>->message);
    } </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$warn</span></span><span> = </span><span><span class="hljs-variable">$warn</span></span><span>-></span><span><span class="hljs-title function_ invoke__">next</span></span><span>());
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"No warnings generated.\n"</span></span><span>;
}

</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>

V. Summary

If mysqli::get_warnings() shows no warnings, don’t immediately suspect the API itself. First confirm that the SQL statement actually generated warnings, that the timing and method of the call are correct, and that both server and client configurations are properly set. By following the above steps, you can usually resolve the issue and capture the expected warning messages.

Hopefully this article helps you better understand and use mysqli::get_warnings(), improving your debugging efficiency when working with databases.