PHPでSQLServerを使う [Insert]

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メソッドを使ったアクセスを行うことにしましょう。

スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする