回答編集履歴
2
PDO bindValue()コードサンプルを追加
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エスケープについて追記
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'];
|