質問: PHPの中にsql文のinsertを使用してレコードの追加処理を しようとしています。 開発環境は、10.1.13-MariaDB - mariadb.org binary distribution Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.23です。 実行したところ、phpでのエラーは出ていないのですが、実際に データベースを確認すると、レコードの追加がされていません。 sql文でエラーがあったと思うのですが、エラーの吐き出し方を 教えてください。。 なお、ローカル環境の学習用なので、敢えて編集せずにそのまま コードの一部を載せておきます。 実行結果としましては、会員登録が完了いたしました。の メッセージが出力され画面上にエラーは表示されませんでした。 しかし、実際にデータベースのテーブルを確認すると、レコードは 追加されていませんでした。 insert文では、フィールドの順序通りに指定しています。 変数のエラー等、phpでエラーの出力はありませんでした。 なお、フィールドの第1項目はcodeでAutoIにしています。 第2項目はdateでTIMESTAMPにしているので、実質第3項目の passwordから値を指定しています。 以下は、実際のコードのsql文の前後から抜粋します。 構文的におかしい部分があれば、それも含めてご教授ください。 皆様お忙しいとは思いますが、ぜひ教えて頂けたら助かります。 $lastmembercode=0; $dsn='mysql:dbname=ranzan;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='INSERT INTO student (password,name,email,postal1,postal2,address,tel,danjo,born) VALUES (?,?,?,?,?,?,?,?,?)'; $stmt=$dbh->prepare($sql); $data=array(); $data[]=md5($password); $data[]=$name; $data[]=$email; $data[]=$postal1; $data[]=$postal2; $data[]=$address; $data[]=$tel; if($danjo=='dan') { $data[]=1; } else { $data[]=2; } $data[]=$born; $stmt->execute($data); $sql='SELECT LAST_INSERT_ID()'; $stmt=$dbh->prepare($sql); $stmt->execute(); $rec=$stmt->fetch(PDO::FETCH_ASSOC); $lastmembercode=$rec['LAST_INSERT_ID()']; $dbh=null; print '会員登録が完了いたしました。';
回答: ``` setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'INSERT INTO student (password,name,email,postal1,postal2,address,tel,danjo,born) VALUES (?,?,?,?,?,?,?,?,?)'; $stmt = $dbh->prepare($sql); $data = array(); $data[] = md5($password); $data[] = $name; $data[] = $email; $data[] = $postal1; $data[] = $postal2; $data[] = $address; $data[] = $tel; if ($danjo == 'dan') { $data[] = 1; } else { $data[] = 2; } $data[] = $born; $stmt->execute($data); $lastmembercode = $dbh->lastInsertId(); } catch (Exception $e) { var_dump($e); } ```