Guest User

Untitled

a guest
Mar 18th, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.82 KB | None | 0 0
  1. <?php
  2.  
  3. // データベースに接続するための情報
  4. $dsn = 'mysql:dbname=mydb;host=localhost;charset=utf8';
  5. $dbuser = 'root';
  6. $dbpass = '';
  7.  
  8. // $_GET['name'] をエラーが出ないように確実に文字列として取得
  9. $name = (string)filter_input(INPUT_GET, 'name');
  10.  
  11. try {
  12.    
  13.     // データベースに接続
  14.     // 失敗するとcatchブロックにジャンプする
  15.     $pdo = new PDO($dsn, $dbuser, $dbpass);
  16.    
  17.     // PDO関連の全てのメソッドで失敗時にcatchブロックにジャンプするようにする
  18.     // こうすることでいちいち $result_flag とか書いてチェックする必要がなくなる
  19.     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  20.    
  21.     // プリペアドステートメントを生成
  22.     $stmt = $pdo->prepare('SELECT * FROM user_db WHERE name = ?');
  23.    
  24.     // プレースホルダ「?」に値を文字列としてバインドして実行
  25.     $stmt->execute([$name]);
  26.    
  27.     // 結果を配列で取得しておく
  28.     $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  29.    
  30. } catch (PDOException $e) {
  31.    
  32.     // エラーを「500 Internal Server Error」でテキストとして表示して終了
  33.     header('Content-Type: text/plain; charset=UTF-8', true, 500);
  34.     exit($e->getMessage());
  35.    
  36. }
  37.  
  38. // HTMLエスケープするための関数を用意
  39. // (SQLの文字列のためのエスケープと全く処理内容が異なるので注意)
  40. function h($str) {
  41.     return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
  42. }
  43.  
  44. // HTML表示開始
  45. header('Content-Type: text/html; charset=UTF-8');
  46.  
  47. ?>
  48. <!DOCTYPE html>
  49. <title>検索結果</title>
  50. <h1>結果</h1>
  51. <p>マッチした行をJSON形式で簡易的に表示します.</p>
  52. <pre><?=h(json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT))?></pre>
Add Comment
Please, Sign In to add comment