1

次のコードを使用してget変数から結果を取得しようとしていますが、別のコード(さらに下にリストされています)を使用しましたが、使用中にエスケープする方法はありません。何が間違っているのかわかりませんが、私は助けが必要です、私はPDOを始めたばかりなので、はい、私はばかです:Dですが、学びたいです。

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $q    = "SELECT * FROM users WHERE id=:id";
    $query = $odb->prepare($q);
    $results = $query->execute(array(
        ":id" => $id
    ));
    if($result-> rowCount()>0) {
        foreach($result as $item) {
            echo $item['user'];
        }
    }
}

動作したがエスケープがなかったコード:

$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id=".$id."";
$result = $odb->query($query);
if($result->rowCount() > 0) {
    foreach($result as $item) {
        echo  $item['user'];
    }
}

おかげで、PS、それが私がかろうじて13歳であるということではなく、愚かな質問であり、12歳または13歳の人がコードに関して尋ねる質問は、愚かであると見なすことができるとは思わない。私が間違ったことを教えてください。

ありがとう!

4

2 に答える 2

2

結果ループ(if {}ステートメントの間およびそれを含むすべて)を次のように書き直す必要があります。

while (($item = $results->fetch(PDO::FETCH_ASSOC)) !== FALSE) {
    echo $item['user'];
}

結果セットの前の行数が特に必要でない限り、rowCount()を呼び出す必要はありません。結果がない場合、最初の呼び出しはFALSEを返し、ループは反復せずにフォールスルーするため、ループはすぐに失敗します。

編集(デバッグステップ):

これを使うと何が見えますか?$ _GET ['id']に余分な文字(空白)または何かがあると思います。これは、リテラルとして渡す場合は有効ですが、パラメーターとして渡す場合は有効ではありません。

if (isset($_GET['id'])) {
  $id = $_GET['id'];
  die(var_export($id, TRUE));
}
于 2012-07-02T02:30:51.513 に答える
0
if(isset($_GET['id'])){
    $id = $_GET['id'];

    $q = "SELECT * FROM `users` WHERE `id` = :id";
    $query = $odb->prepare($q);
    $query->execute(array(
        ':id' => $id
    ));

    if($query->rowCount() > 0){
        foreach($query->fetchAll() AS $item){
            echo $item['user'];
        }
    }
}

私は少し周りを見回してphpfreaksに尋ねました、彼らはこれがうまくいくと私に言いました、私はそれを試しました、それはうまくいきました。

于 2012-07-03T02:06:40.733 に答える