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 回答