fork download
  1. <?php
  2.  
  3. /* HTML特殊文字をスケープ */
  4. function h($input) {
  5. return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
  6. }
  7.  
  8. /* 外部から受け取る変数の配列構造をフィルタリング */
  9. function filter_structure($var, $default_structure) {
  10. $ret = array();
  11. foreach ($default_structure as $key => $value) {
  12. if (!isset($var[$key])) {
  13. $ret[$key] = $value;
  14. } elseif (is_array($value)) {
  15. $ret[$key] = filter_request($var[$key], $value);
  16. } elseif (is_array($var[$key])) {
  17. $ret[$key] = $value;
  18. } else {
  19. $ret[$key] = $var[$key];
  20. }
  21. }
  22. return $ret;
  23. }
  24.  
  25. // デバッグ用データ
  26. $_POST['hiragana'] = array(
  27. 'a' => 'あいうえお',
  28. 'k' => 'かきくけこ',
  29. 's' => 'さしすせそ',
  30. 't' => 'たちつてと',
  31. 'n' => 'なにぬねの',
  32. );
  33.  
  34. try {
  35.  
  36. // PDOオブジェクト生成
  37. $pdo = new PDO('mysql:dbname=db;host=localhost;charset=utf8');
  38.  
  39. // SQL実行失敗時に例外をスローする
  40. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  41.  
  42. // 入力をフィルタリング
  43. $post = filter_structure($_POST, array(
  44. 'hiragana' => array(
  45. 'a' => '',
  46. 'k' => '',
  47. 's' => '',
  48. 't' => '',
  49. 'n' => '',
  50. ),
  51. ));
  52.  
  53. // プリペアドステートメントを生成
  54. $stmt = $pdo->prepare('INSERT INTO hiragana(a, k, s, t, n) VALUES(?, ?, ?, ?, ?)');
  55.  
  56. // 値をバインドして実行
  57. $stmt->execute($post['hiragana']);
  58.  
  59. $message = '成功!';
  60.  
  61. } catch (Exception $e) {
  62.  
  63. $message = $e->getMessage();
  64.  
  65. }
  66.  
  67. ?>
  68. <!DOCTYPE html>
  69. <html>
  70. <head>
  71. <meta charset="UTF-8">
  72. <title>Insert Test</title>
  73. </head>
  74. <body>
  75. <p><?=h($message)?></p>
  76. </body>
  77. </html>
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert Test</title>
</head>
<body>
<p>could not find driver</p>
</body>
</html>