のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,908人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ【PHP】下らねぇ質問はID出して書き込みやがれ 98

    php覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    801 = 796 :

    ひどいいわれよう

    802 = :

    IPアドレス制限+端末IDで穴を全部塞いだ気になってる携帯web屋がほとんど・・・
    正直このスレより質が低いと思うw

    803 = :

    ぶちゃっけどうでもいい感じ。
    どのサイトも穴だらけでその携帯の部分だけ躍起になってるのが
    滑稽に見えて仕方が無い。

    804 = :

    ぶちゃっけ

    805 = :

    ぶちゅぅ

    806 = :

    ぶちゅっけ

    807 = :

    このスレキチガイ覆いね

    808 = :

    今頃気づいたのかね

    809 = :

    覆いね

    814 = :

    スルーする

    815 = :

    webサイト作るのにC++が必要なのかと
    道具は要所で使うことに意味がある

    816 = :

    すみません。
    お蔭様でもうほぼ完成したんですが、どうしても解決しない所がありまして質問させてください。

    $dbh = new PDO($dsn, $user, $password);

    $dbh->query('SET NAMES utf8');

    $sql = "select * from `user` where `id` = ? AND `pass` = ?";

    $query = $dbh->prepare($sql);
    $result = $query->execute(array($id,$pass));
    $res = $result->fetchAll(PDO::FETCH_ASSOC);

    ログインの部分で上のように記述すると

    Fatal error: Call to a member function fetchAll() on a non-object in C:\xampp\htdocs\osusume\login_2.php on line 50

    と出てしまいます。

    $sqlを "select * from `user` where `id` = \"{$id}\" AND `pass` = \"{$pass}\"";


    のように書くとログイン可能なんですが、これだと脆弱性が残る気がして不安です。
    ちなみに$idと$passの箇所は

    $id = htmlspecialchars($_POST[id],ENT_QUOTES);
    $pass = htmlspecialchars($_POST[pass],ENT_QUOTES);

    のように受け取っています。
    何が駄目でエラーになってしまうのでしょうか?

    817 :

    IDを出し忘れていました。

    819 = :

    >>816
    htmlspecialcharsはその名のとおりHTML出力用ね。
    SQL用のエスケープはMySQLならmysql_real_escape_string

    `id` = ? AND `pass` = ?
    だと引用された$id,$passがクオートされていないのでSQLエラーになってるんじゃないかな。
    `id` = \"{$id}\" AND `pass` = \"{$pass}\"
    で問題ないんじゃね?

    820 = :

    間違った。
    $id='"'.mysql_real_escape_string ($_POST[id],).'"'
    とかか。

    822 = 817 :

    できました…全くお恥ずかしい限り。

    ありがとうございます。

    823 = :

    >>820
    乞食と物乞いの区別が付かないのが、チョウセンヒトモドキ

    824 = :

    なんのためにPDO使ってるんだろうな
    もっとマニュアルちゃんと読めば正しいエスケープ方法も書いてるでしょうに
    ましてやプリペアードステートメントまで使ってるのに

    827 = :

    prepare使えば勝手にエスケープされるだろ

    828 = :

    >>827
    その教え方だと危険。プレースホルダ使えというべき。
    プレースホルダ使わないでデータ埋め込みでSQL文作って
    prepareする奴いるから!!(笑)

    829 = :

    考え方というか、単に言い方だな
    さすがにプレースホルダ使わずprepare使うアホがいるとは想像してなかったんだろう

    830 = :

    まぁ問題は>>819-821だわな

    835 = :

    サイトの宣伝ご苦労様です

    836 = :

    >>829
    考え方っていってないのになんで考え方というかっていったの???

    844 = :

    使っていけないということはないが普通使わない
    使う必要性もないしむしろ使ったらPDO使ってる意味がない
    特定のドライバにこだわらずどのRDBでも使えることを想定してるのに
    わざわざドライバ固有の関数使うってどうなのよって話

    845 = :

    ではどうすればいいのですか。

    846 = :

    >>845
    >>1
    ていうか前の方にさんざん書いてるだろ・・・
    プリペアードステートメント使えって

    847 = :

    >>845
    http://www.php.net/manual/ja/pdo.quote.php
    ここの説明を読みなさいよ

    848 = :

    せっかく本家でマニュアルが整備されているのにそれを読まない人が居るんだね

    849 = :

    $pdo = new PDO(略);
    $res = $pdo->prepare("INSERT INTO hoge(foo, bar) VALUES (:foo, :bar)");
    $res->bindValue(":foo", $_POST['foo']);
    $res->bindValue(":bar", $_POST['bar']);
    $res->execute();

    ↓のようなことはする必要がないの
    $res->bindValue(":foo", mysql_real_escape_string($_POST['foo']);

    850 = :

    ふーん。ところでPDOって日本語を正しく扱えないってホント?


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について