English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
mysqli_get_warnings()関数は、最後に実行されたクエリで生成されたエラーを返します。
最後のMySQLi関数呼び出しがMySQLクエリを実行し、エラーを生成した場合。mysqli_get_warnings()関数は、最後に実行されたクエリで生成されたエラーを配列の形式で返します。
mysqli_get_warnings($con)
番号 | 引数及び説明 |
---|---|
1 | con(必須) これはMySQL Serverとの接続を表すオブジェクトです。 |
PHP mysqli_get_warnings()関数は、最後のクエリ実行中に生成された警告を含む配列を返します。
この関数は最初にPHPバージョン5導入され、すべての上位バージョンで使用できます。
以下のように、Empという名前のテーブルを作成したと仮定します:
CREATE TABLE EMP( ID TINYINT, First_Name VARCHAR(50) Not NULL, Last_Name VARCHAR(10) Not NULL, Date_Of_Birth date, Salary Int(255) );
以下の例では、mysqli_get_warnings()関数の用法(手続き型スタイル)-
<?php //接続を確立します $con = mysqli_connect("localhost", "root", "password", "mydb"); //employee テーブルにレコードを挿入します $sql = "INSERT IGNORE into emp values(1, 'Sanjay', NULL, DATE('1981-12-05'), 2566)"; mysqli_query($con, $sql); //Warnings $warnings = mysqli_get_warnings($con); print("Warning(s): "."\n"); print_r($warnings); $sql = "INSERT IGNORE into emp values (15, 'Swetha', 'Yellapragada', DATE('1990-11-25'), 9986), (15, NULL, 'Prayaga', DATE('1990-11-25'), 9986)"; mysqli_query($con, $sql); //Warnings $warnings = mysqli_get_warnings($con); print("\n"."警告(複数): "); print_r($warnings); //接続を閉じます mysqli_close($con); ?>
出力結果
警告(複数): mysqli_warning オブジェクト ( [message] => Column 'Last_Name' cannot be null [sqlstate] => HY000 [エラーコード] => 1048 ) 警告(複数): mysqli_warning オブジェクト ( [message] => Data truncated for column 'Last_Name' at row 1 [sqlstate] => HY000 [エラーコード] => 1265 )
以下は関数です:mysqli_get_warnings()の別の例として:-
<?php //接続を確立します $con = mysqli_connect("localhost", "root", "password", "mydb"); //未知のテーブルを削除します mysqli_query($con, "drop table if exists WrongTable"); print("\n"."警告(複数): "."\n"); print_r(mysqli_get_warnings($con)); //接続を閉じます mysqli_close($con); ?>
出力結果
警告(複数): mysqli_warning オブジェクト ( [message] => Unknown table 'mydb.wrongtable' [sqlstate] => HY000 [エラーコード] => 1051 )
また、mysqli_warning クラスを使用して:next()以下のように、警告を一つずつ検索します:
<?php //接続を確立します $con = new mysqli("localhost", "root", "password", "mydb"); //employee テーブルにレコードを挿入します $con -> query("INSERT IGNORE into emp values(105, NULL, 'Yellapragada', DATE('1981-12-05'), 2566)"; if($con-> warning_count){ $w = mysqli_get_warnings($con); do { echo "警告: $w-> errno: $w-> message\n"; } while ($w-> next()); } //接続を閉じます $con -> close(); ?>
出力結果
警告: 1048': First_Name' カラムは NULL ではなりません 警告: 1265': Last_Name' カラムの行でデータが切り取られました 1
最後に実行されたクエリで生成されたエラーを返します
<?php $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "mydb"; $conn = new mysqli($servername, $username, $password, $dbname); if (!$conn->real_connect($servername, $username, $password, $dbname)) { die('Connect Error ('. mysqli_connect_errno() . ') '. mysqli_connect_error()); } print("データベースに接続しました" . "\n"); mysqli_query($conn, "CREATE TABLE sample (ID INT, Name VARCHAR(20)))"); $query = "INSERT IGNORE INTO sample (id,name) VALUES ( 1,'Rajesh Ramayan Kootrapally')"; mysqli_query($conn, $query); $count = mysqli_warning_count($conn); print("クエリにおける警告の数:" . $count . if ($count) { $warnings = mysqli_get_warnings($conn); print_r($warnings); } mysqli_close($conn); ?>
出力結果
データベースに接続しました クエリにおける警告の数:1 mysqli_warning オブジェクト ( [メッセージ] => データがカラム 'Name' において行で切り取られました 1 [sqlstate] => HY000 [エラーコード] => 1265 )