<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">'display_errors'</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.
You must call it immediately after executing the SQL statement, and before executing the next one. Otherwise, previous warning messages will be cleared.
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>();
}
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>
Mismatched encodings or incorrect field types can also trigger warnings. Ensure the database and client character sets match, and that field types are appropriate.
<?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 ('This is a string that exceeds the column length limit...')"</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>
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.
Related Tags:
mysqli