PHPでPDOを使ってSQLServerのDBにデータを追加してみました。
実行環境およびテストデータは、前回(Select)と同じです。
前回は、SQL文 UserID Password 全てハードコーディングしましたが、今回は変数に置き換えています。また prepareメソッドを使って少しPDOの正統的な(?)使用法を目指しました。(参照:PHPBook)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHPでSQL Serverを使う(insert)</title> </head> <body> <?php $dsn = 'sqlsrv:server=KAZ-PCSQLEXPRESS;Database=TestDB'; $user = 'UID'; $password = 'PWD'; try{ $conn = new PDO($dsn, $user, $password); print('<br />'); if ($conn == null){ print('接続に失敗しました。<br />'); } else{ print('接続に成功しました。<br />'); $conn->query('SET NAMES sjis'); print('<br />'); lst($conn, '追加前のデータ一覧'); print('<br />'); $sql = 'insert into 得意先マスタ (cd, 得意先名, 登録日時) values (?, ?, ?)'; $stmt = $conn->prepare($sql); tuika($stmt, '101', '新しい得意先A ','2014-04-14 21:25:00'); tuika($stmt, '102', '新しい得意先B ',date('Y-m-d G:i:s')); tuika($stmt, '103', '新しい得意先C ', null); print('<br />'); lst($conn, '追加後のデータ一覧'); } } catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } // セッション解放 $conn = null; ?> </body> </html> <?php function tuika($stmt, $cd, $nm, $tm) { $flag = $stmt->execute(array($cd, $nm,$tm)); if ($flag){ print('データの追加に成功しました<br>'); } else{ print('データの追加に失敗しました<br>'); } } function lst($conn, $ttl) { print($ttl.':<br>'); $sql = 'select * from 得意先マスタ'; $stmt = $conn->prepare($sql); $stmt->execute(); while($row = $stmt->fetch(PDO::FETCH_BOTH)){ print($row['cd']); print($row[1]); print($row[2].'<br>'); } } ?>
実行結果
1件目:101 新しい得意先A 登録日時は文字列リテラル
2件目:102 新しい得意先B 登録日時は書式付マシン日時
3件目:103 新しい得意先C 登録日時なし(null)
3件とも追加成功です。
prepare メソッドではパラメータを 自動的にエスケープ処理をしてくれるので 個別にパラメータのエスケープを行う必要はなくなります。この点はC#・VBでのパラメータクエリの考え方と同じです。SQLインジェクション対策の見地からも prepareメソッドを使ったアクセスを行うことにしましょう。