現在の位置: ホーム> 最新記事一覧> mysqli :: get_warningsを警告なしに使用しますか?問題をトラブルシューティングする方法は?

mysqli :: get_warningsを警告なしに使用しますか?問題をトラブルシューティングする方法は?

gitbox 2025-08-21
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// これは、記事の内容に関係のない事前コードまたは宣言の部分です,必要に応じて自由に変更できます</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>

<hr>

<h2>使用 <code>mysqli::</span><span><span class="hljs-variable constant_">get_warnings</span></span><span>

実行後、 get_warnings()を呼び出して、警告があるかどうかを確認します。

2。get_warnings ()を呼び出すタイミングを確認します

SQLが実行され、次のステートメントが実行される直前に呼び出される必要があります。それ以外の場合、以前の警告メッセージがクリアされます。

3。すべての警告を反復します

時々、ループする必要がある複数の警告があります。

 
</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.MySQLサーバーの構成を確認します

サーバーが警告出力をオフにしないことを確認し、 SQL_ModeでStrictモードが有効になっているかどうかを確認します。一部のモードでは、警告がエラーとして扱われる場合があります。

 <span class="fun"></span> <span> <span class = "hljs-string"> &#39;sql_mode&#39; </span> </span> <span>などの変数を急行します。</span>

5.クライアントのエンコードとデータ型を確認します

エンコードの不一致またはフィールドタイプの一貫性のないものは、データベースとクライアントの文字セットが一貫しており、フィールドタイプが正しいことを確認するために警告を引き起こす可能性もあります。

4.サンプルコード

&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">"接続に失敗しました: "</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 ('これは、フィールドの長さの制限を超える文字列です...')"</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">"実行に失敗しました: "</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">"警告: シリアルナンバー %d,州 %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-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">"警告は発生しません。\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>

5。概要

mysqli :: get_warnings()には警告がないことがわかった場合、API自体を直接疑うことはありませんが、最初にSQLステートメントに警告があり、通話タイミングとメソッドが正しいかどうか、サーバーとクライアントの環境構成が妥当かどうかを確認します。段階的なトラブルシューティングは、通常、問題を解決し、目的の警告情報を取得することができます。

この記事がmysqli :: get_warnings()をよりよく理解して使用して、データベース操作のデバッグ効率を向上させるのに役立つことを願っています。