teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

PDO bindValue()コードサンプルを追加

2017/12/31 08:37

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -11,6 +11,17 @@
11
11
 
12
12
  //特定のURLクエリを表示(デコード済)
13
13
  echo $_GET['tag'];
14
+
15
+ //DB格納の例
16
+ try {
17
+ $db = new PDO('mysql:dbname=データベース名;host=ホスト名', 'ユーザー名', 'パスワード');
18
+ $stm = $db->prepare('INSERT INTO ... WHERE カラム名 = ? ...');
19
+ $stm->bindValue(1, $access_url, PDO::PARAM_STR); //文字列として格納
20
+ $stm->execute();
21
+ }
22
+ catch (PDOException $e) {
23
+ echo $e->getMessage();
24
+ }
14
25
  ```
15
26
 
16
27
  最近のメジャーなブラウザは、ロケーションバーのURLを自動的にURLをデコードします。

1

DBエスケープについて追記

2017/12/31 08:37

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -1,5 +1,7 @@
1
1
  `$_SERVER`というPHPのスーパーグローバル変数はサーバーに来た生の情報が入っているので、マルチバイト文字は`urldecode()`でデコードしなければなりません。一方、特定のURLクエリ情報を連想配列で保持している`$_GET`は既にデコード済みの値が入っています。
2
2
 
3
+ DBに格納する場合は、URLエンコードされたままの文字列でも構いませんが、エスケープしなければならない文字列があるはずなので、PDOであれば`bindValue()`や`bindParam()`を使って格納します。
4
+
3
5
  ```php
4
6
  //http://ドメイン名/tag.php?tag=%E7%BE%8E%E5%B0%91%E5%A5%B3%E5%A3%B0%E5%84%AA&
5
7
  $access_url = $_SERVER['REQUEST_URI'];