ここから本文です

PHP+Mysqlで簡単な記事投稿機能を作っています。 そこでデータベースから記事を取...

xrp********さん

2019/8/2122:16:18

PHP+Mysqlで簡単な記事投稿機能を作っています。
そこでデータベースから記事を取得するにはどういう方法がいいのでしょうか?

例えば
example.com/item/545
にアクセスしたらデータベースからidが545の記事を持ってきて表示させる

<?php
$params = [];
$params = parse_url($_SERVER['REQUEST_URI']);
$item_id = explode('/', $params['path']);
if (count($item_id) > 3) {
exit();
}

$sql = 'select * from item where id = :id limit 1';
$stmt = $dbh->prepare($sql);
$stmt->execute([':id' => $item_id]);

...

これは危険ですか?

閲覧数:
24
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

2019/8/2122:34:34

基本的に外部からのデータ(及び外部からのデータをそのまま保存しているもの)については

・値が妥当かどうかキチンとチェックする
・SQL文に渡すときには、エスケープする
(prepare/executeなら問題ない)
・表示するときにはhtmlspecialcharsする

くらいでいいと思います。

URLの組み立てですが、/item/545 でアクセスさせたいのであれば、.htaccessで、/item/545 へのアクセスを(mod_rewriteで内部的に)/view.php?item_id=545 などへrewriteしてしまうことが多いと思います(view.phpが表示するphpスクリプトとする)。

というか、/item/545 では実際に動作するphpスクリプトはどれ?ってことになりますよね(汗
また提示されたphpスクリプトでは $item_id が配列(要素数 3)になるので、そのままexecutreに引き渡せませんよね(2番目の要素が "item"かチェックした上で 3番目の要素のみを使う)。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

qo_********さん

2019/8/2200:40:28

危険というより、
explode('/', $params['path']);
他の場所でも、こんな処理が必要になるので、
URLのパターンを管理しなくてはいけなくなる。
例えば、検索結果一覧の機能だとどうなるだろうか。


PHPにおいて、SQL文全体をくくる際には、
ダブルクォーテーションかヒアドキュメントを使う。
詳しくは、
[SQL シングルクォーテーション][検 索]

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる