以前PDOクラスを使用してmysqlに接続してデータベースを操作する方法を書きました。今回はmysqliを使ってphpからmysqlに接続する方法を書きます。
よく考えたらPDOクラスの方が汎用性高いのでこっちの記事を先に書くべきだったかもですね。
自分用のまとめなので間違いや省略などあります。間違いに関しては指摘していただけると幸いです。
データベースに接続
mysqli_connect関数を使用してデータベースに接続します。また、接続できたらtrue、できなかったらfalseが帰ってきます。
$link = mysqli_connect('host','user','password','DB');
//引数はホストorIPアドレス、ユーザ名、パスワード、データベース名
接続に失敗した時エラーを出力
なにかしら問題があってエラーが発生した時はmysqli_connect_error関数を使ってエラーを出力します。
if(!$link){
echo "エラー : データベースに接続できませんでした。" . PHP_EOL;
echo mysqli_connect_error() . PHP_EOL;
exit;
}else{
echo "データベースに接続できました。" . PHP_EOL;
}
クエリの実行
クエリの実行にはmysqli_query関数を使用します。
引数は接続時にmysqli_connect関数の返り値を入れた変数です。引数はmysqli_connectの戻り値とsql文が入った変数です。
$result = mysqli_query($link, $sql);
返り値がないもの(insert)などは成功するとtrue、selectなど返り値があるものは$resultに結果が格納されます。
もし、失敗した場合mysqli_error関数を使うことでエラーログの出力が可能です。引数はmysqli_connectの戻り値です。
echo mysqli_error($link);
SELECTで取得した文を表示する
実行結果は連想配列として保存され、それをwhileで回しながら出力していくイメージです。
foreach文ばっか使っていましたから少し違和感ですよね。
$sql = 'select * from table';
$result = mysqli_query($link, $sql);
while ($value = mysqli_fetch_assoc($result)) {
var_export($value);
}
array (
'id' => '1',
'name' => 'tanaka'
'birthplace' => 'Japan'
)array (
'id' => '2',
'name' => 'suzuki'
'birthplace' => 'Japan'
)
SQL文に変数を埋め込んで実行する
$name = 'keia';
$birthplace = 'Japan';
$sql = <<<EOT
INSERT INTO table (name, birthplace)
VALUES("{$name}", "{$birthplace}")
EOT;
$result = mysqli_query($link, $sql);
このようにすることでSQL文に変数を埋め込んで実行することが可能になります。
mysqliのオブジェクト型だと以下の方法もあります
$link = new mysqli('host', 'user', 'pass', 'DB');
$sql = INSERT INTO table (name, birthplace) VALUES(?,?);
$stmt = $link->prepare($sql);
$stmt->bind_param('ss', $name, $birthplace); //第一引数は型、$nameも$birthplaceもstringなのでssになる
処理が終わったらメモリの解放を!
前述した通り結果はメモリに保存されます。メモリの圧迫を避けるためにも取得した結果の使用が終わったらメモリの解放をしていきます。
mysqli_free_result($result);
切断
切断する時はmysqli_close関数を使用します。
mysqli_close($link);
まとめ
まだまだなので追記していこうと思います。