Jul7:PEAR::DB,プレースホルダ
プレースホルダを使うことによって、文字列の一部を他の文字列に置換する。文字列の一部を一般化し、そこにスカラー量や文字列を入れ込むことが出来るので便利。
$str = $db_connect->prepare("SELECT * FROM pref_info WHERE userid=(?)"); $str = $db_connect->execute($str,20);
prepareというのが、SQLを後で送信するための準備であり、execute(第一引数)で$strクエリを送信。第二引数は(?)の部分に入る値を指定している。
もし(?)が2個ある場合は、第二引数を配列にしてあげればよい。つまり、
$str = $db_connect->execute($str,array(20,10));
のようにすればよい。エスケープ処理を行ってくれるので、より簡潔にクエリを送信することが出来る。
以降、送信クエリのスクリプト
///////////////クエリ準備/////////////////////////// $sql2 = $db_connect->prepare( "INSERT INTO user_info( familyname ,firstname ,familynamekana ,firstnamekana ,sex ,prefid ,zip1 ,zip2 ,address1 ,address2 ,email ,hobby ,other_hobby ,opinion ,createtime ,updatetime ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW())"); /////////////クエリ送信///////////////////////////////////// $sql2 = $db_connect->execute($sql2,array( $_POST["lastname"] ,$_POST["firstname"] ,$_POST["lastnamekana"] ,$_POST["firstnamekana"] ,$_POST["sex"] ,$_POST["prefid"] ,$_POST["zip1"] ,$_POST["zip2"] ,$_POST["address1"] ,$_POST["address2"] ,$_POST["mail_address"] ,$h_array2 ,$_POST["other"] ,$_POST["comment"] )); if(DB::isError($sql2)){ $view = "top"; $error[]="データを登録できませんでした。再度登録をお願いします。<br />"; }else{ ?>
メモ
・user_idはオートインクリメントでレコードが追記されたら勝手に入ってくるので、クエリにわざわざ入れる必要はない。
・mysqlにNOW()関数があるので、これを使う。
なお、上記のクエリ送信の流れは、以下、
///////////////////クエリ準備////////////////////////// $sql2 = "INSERT INTO user_info( familyname ,firstname ,familynamekana ,firstnamekana ,sex ,prefid ,zip1 ,zip2 ,address1 ,address2 ,email ,hobby ,other_hobby ,opinion ,createtime ,updatetime ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW())"; //////////////////クエリ送信/////////////////////////////// $sql2 = $db_connect->query($sql2,array( $_POST["lastname"] ,$_POST["firstname"] ,$_POST["lastnamekana"] ,$_POST["firstnamekana"] ,$_POST["sex"] ,$_POST["prefid"] ,$_POST["zip1"] ,$_POST["zip2"] ,$_POST["address1"] ,$_POST["address2"] ,$_POST["mail_address"] ,$h_array2 ,$_POST["other"] ,$_POST["comment"] )); if(DB::isError($sql2)){ $view = "top"; $error[]="データを登録できませんでした。再度登録をお願いします。<br />"; }else{ ?>
と一緒。$sql2に?の入ったクエリを作っておき、そのクエリをqueryコマンドで送信する。なお、その時第2引数に配列で?に入る文字を入れるのはexecuteと同じ。