oracleでinsertに挑戦 -2-

2019年11月13日 CEO 0 Comments

INSERT ALL INTO table_name VALUE(,,,) SELECT * FROM DUAL;

この方法はコマンドラインから処理する際には便利かもしれないが、

phpから使うには適していない。。

SQLインジェクション対策として、

prepareでエスケープ処理してinsertすべき。

というか、そもそも繰り返し処理ならループ処理を入れればいい話。。

結論、面倒ですが、INSERT ALLは使えないので、カラム名を指定しながら、

INSERTしていくしかないようです。日本語のカラム名に注意しながら、、

それと、INSERT処理のメモとして、、

<!–insertはexecを使用しない–>

<?php
require (“”);//db connect
/*
直接SQLを書かないで、?を利用してformの値を指定する
$statement=$db->exec(“insert into memos set memo=” $ S_POST[“memo”]”,created_at=now()”);
*/
$statement=$db->prepare(“insert into memos set memo=?,created_at=now()”);//prepare:値をエスケープ
$statement->execute(array($_POST[“memo”]));//$_POST[“memo”]:formの値を取得
echo “message si submit!”;

/*
bindParamでの書き方
executeでは文字列しか渡せないので、型を指定して渡したい場合はbindParamを使う
*/
$statement=$db->prepare(“insert into memos set memo=?,created_at=now()”);//prepare:値をエスケープ
$statement->bindParam(1,$_POST[“memo”],PDO::PARAM_INT);//(パラメータの順番、値、型の指定)
$statement->execute();
?>