PDO基础知识,但我真的不明白:-(

时间:2017-03-20 16:54:34

标签: php select pdo execute prepare

我是PDO的新手,我无法让它发挥作用:

我想检查一下验证码。每天,询问的代码会根据日期编号而变化。在我的数据库中,一个表包含两列:JOUR(= day)和REPONSE(= answer)。用户输入我存储在$ code_entre中的代码。必须将此代码与输入代码进行比较。

使用date()方法,我得到了一天的号码。我将它存储在$ numero_jour中。我的代码应该获取当天的代码并将其与输入代码进行比较。这是代码:

            $numero_jour = date(j); //Récupère le numéro du jour en cours.

            $sql2 = $bdd1->prepare('SELECT JOUR FROM questions_securite WHERE REPONSE=:reponse LIMIT 1');

            $sql2->bindParam(':reponse', $code_entre, PDO::PARAM_STR);          
            $sql2->execute();
            $req2 = $sql2->fetch();

            $sql2->closeCursor(); 

            if($req2 != $numero_jour) {
                return 'Erreur de code de sécurité. Veuillez recommencer.';
            }

......没有任何反应!我尝试了" echo $ req2指令,我得到的只是"数组"字。

我做错了什么?我确信解决方案很简单,但我找不到它!

谢谢!

1 个答案:

答案 0 :(得分:0)

让我们看一下PDO&#39> fetch 方法的documentation

  

从结果集中获取下一行

这意味着 $ req2 不是字符串,而是包含 key-&gt; value 对的行,其中键表示行中的列。< / p>

这实质上意味着您需要访问行中列的值。

文档中的给定示例应该可以帮助您了解如何实现目标:

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->name;

在这种情况下,$ result看起来像,例如:

Array
(
    [name] => apple
    [colour] => red
)

自从我使用PDO以来已经有一段时间了,但我在某个时刻使用的一个例子来迭代多行以获取每行的某个列的值就像这样,如果你需要帮助你检查多行:

...

$sth ->execute();
$sth ->setFetchMode(PDO::FETCH_ASSOC);
$currentName = "";
while ($row = $sth ->fetch())
{
    $currentName = $row['name'];
}

这应该足以让你入门。请记住使用文档和高度评价的教程来帮助您。