# `mysqli` を使って TiDB に接続する

+ **`mysqli`** クラス
  + **`mysqli(hostname, username, password)`**
  + オプションで、接続するデータベースと `port/socket` 名の詳細を指定します
  + **`connect_errno`** と **`connect_error`** のプロパティには、最後の接続エラーのエラー番号とエラーメッセージが格納されます
  + **`query()`** 関数は、文字列パラメータとして渡された SQL ステートメントを実行します
+ **`mysqli_result`** クラス
  + **`$mysqli->query()`** を実行して返される結果セット
  + 結果セットからデータを取得するためのさまざまな **`fetch_*()`** メソッドが含まれています。例:**`fetch_assoc()`**

---------------------------------------------------------------
mysqli インスタンスの `connect_errno` プロパティには、最後の接続の障害状態が格納されます。接続に成功すると、connect_errno はゼロになります。それ以外の場合は、エラーを表す数字が含まれます。

`connect_error` プロパティには、最後のエラーのエラーメッセージが含まれます (存在する場合)。

mysqli インスタンスの `query()` メソッドは、文字列パラメータに含まれるクエリを実行し、結果セットを含む `mysqli_result` オブジェクトを返します。結果がない場合やエラーが発生した場合は false を返します。

`CREATE` や `UPDATE` など、結果セットを返さないステートメントを実行すると、`query()` メソッドは成功すると true を返します。

`mysqli_result` インスタンスの `fetch_assoc()` メソッドは、シーケンスの各行の連想配列を返します。最初の行から開始し、メソッドが呼び出されるたびに次の行に移動します。連想配列には、その行の列名と列値の組み合わせごとのキーと値のペアが含まれています。たとえば、`$row['first_name']` には、直近の `fetch_assoc()` 呼び出しで返される現在の行の `first_name` 列の値が含まれます。

`mysqli_result` インスタンスの結果セットが空の場合、または結果セットに行が残っていない場合、`fetch_assoc()` は NULL を返します。NULL は `false` と評価されるため、`while` ループ条件で結果セットのすべての行を繰り返し処理する場合に便利です。

