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