INSERT文、UPDATE文、DELETE文を実行する
データベースにデータを追加・更新・削除する方法を見てみましょう。PDOクラスの「exec」メソッドを使って実行します。
クラス名
|
PDO
|
メソッド名
|
exec
|
概要
|
更新系のSQL文を実行し、影響を受けた行数を返す
|
パラメーターリスト
|
パラメター名
|
説明
|
string $statement
|
実行するSQL文を指定する
|
返り値
|
int
|
実行した結果、影響を受けた行数を返す。1行も影響を受けなかった場合は0を返す
|
execメソッドの仕様
■ データベースにデータを追加する
「INSERT」文を使ってデータベースにデータを追加してみましょう。
○ ファイル
「FetchObjectTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 |
PHPファイル |
ファイル名 |
ExecInsertTest.php |
サンプルダウンロード
○ プログラム
次のようにプログラムを記述してください。
ExecInsertTest.php
- <html lang="ja">
- <meta charset="utf-8">
- <head>
- <title>INSERT文実行</title>
- </head>
- <body>
- <?php
- try{
- //データベースに接続する
- $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
- $username,
- $password);
- //SQL文を実行する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('追加前*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- //データを追加する
- $ret = $pdo -> exec('INSERT INTO users VALUES("004", "tanaka", "tpass", "田中");');
- //追加後のデータを取得する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('<hr>追加後*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- print('影響を受けた行数:' . $ret);
- }catch(PDOException $e){
○ 実行結果
実行結果
○ 解説
34行目でPDOクラスの「exec」メソッドにINSERT文を渡してSQL文を実行しています。これによりデータベース上でINSERT文が実行され、usersテーブルに行が追加されます。その結果、影響を受けた行数が返り値で取得できるので、変数$retに格納しています。
37~43行目は、行が追加されたことを確認するために再びusersテーブルの全データを取得しています。実行結果を確認すると、データが増えていることがわかります。44行目では、execメソッドの実行結果を表示しています。行を1件追加するSQL文を実行したため、「1」が出力されます。
■ データベースのデータを更新する
「UPDATE」文を使ってデータベースのデータを更新してみましょう。
○ ファイル
「ExecInsertTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 |
PHPファイル |
ファイル名 |
ExecUpdateTest.php |
サンプルダウンロード
○ プログラム
次のようにプログラムを記述してください。
ExecUpdateTest.php
- <html lang="ja">
- <meta charset="utf-8">
- <head>
- <title>UPDATE文実行</title>
- </head>
- <body>
- <?php
- try{
- //データベースに接続する
- $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
- $username,
- $password);
- //SQL文を実行する
- $result = $pdo -> query('SELECT * FROM users WHERE id="004";');
- //データを取得する
- print('更新前*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- //データを更新する
- $ret = $pdo -> exec('UPDATE users SET password="tanapass" WHERE id="004";');
- //更新後のデータを取得する
- $result = $pdo -> query('SELECT * FROM users WHERE id="004";');
- //データを取得する
- print('<hr>更新後*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- print('影響を受けた行数:' . $ret);
- }catch(PDOException $e){
○ 実行結果
実行結果
○ 解説
34行目でPDOクラスの「exec」メソッドにUPDATE文を渡してSQL文を実行しています。これによりデータベース上でUPDATE文が実行されます。今回指定したSQL文は、「id」列の値が「004」のデータの「password」列のデータを更新する指定がされているため、その行のデータのみ更新されます。その結果、影響を受けた行数が返り値で取得できるので、変数$retに格納しています。
25~31行目と37~43行目は、行が更新されたことを確認するために、更新前後でusersテーブルの「id」列の値が「004」の行を、条件を指定して取得しています。実行結果を確認すると、データが更新されていることがわかります。44行目では、execメソッドの実行結果を表示しています。行を1件更新するSQL文を実行したため、「1」が出力されます。
■ データベースのデータを削除する
「DELETE」文を使ってデータベースのデータを更新してみましょう。
○ ファイル
「ExecInsertTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。
ファイルの種類 |
PHPファイル |
ファイル名 |
ExecDeleteTest.php |
サンプルダウンロード
○ プログラム
次のようにプログラムを記述してください。
ExecDeleteTest.php
- <head>
- <title>DELETE文実行</title>
- </head>
- <body>
- <?php
- try{
- //データベースに接続する
- $pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname .';charset=utf8;',
- $username,
- $password);
- //SQL文を実行する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('削除前*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- //データを削除する
- $ret = $pdo -> exec('DELETE FROM users WHERE id="004";');
- //削除後のデータを取得する
- $result = $pdo -> query('SELECT * FROM users;');
- //データを取得する
- print('<hr>削除後*****');
- while($row = $result -> fetchObject('User')){
- var_dump($row);
- }
- print('影響を受けた行数:' . $ret);
- }catch(PDOException $e){
○ 実行結果
実行結果
○ 解説
34行目でPDOクラスの「exec」メソッドにDELETE文を渡してSQL文を実行しています。これによりデータベース上でDELETE文が実行されます。今回指定したSQL文は、「id」列の値が「004」のデータを削除する指定がされているため、その行のデータのみ削除されます。その結果、影響を受けた行数が返り値で取得できるので、変数$retに格納しています。
37~43行目は、行が削除されたことを確認するためにデータを取得しています。実行結果を確認するとデータが1行削除されていることがわかります。44行目では、execメソッドの実行結果を表示しています。行を1件削除するSQL文を実行したため、「1」が出力されます。
前へ 次へ