$行= $ stmt->取();给出未定义的索引错误

时间:2013-12-23 14:32:58

标签: php pdo

<?php
    try{
       $db=new PDO("mysql:host=localhost;dbname=placement","rot","password");
    }catch(Exception $e){
       die( "An error occured".$e->getMessage());
    }
    $username=$_POST['username'];
    $password=$_POST['password'];
    $stmt=$db->prepare("SELECT regno,password FROM placement.authenticate 
                WHERE regno = ? AND password = ? LIMIT 1");         
    $result=$stmt->execute(array($username,$password));
    if($result){
       $row=$stmt->fetch(PDO::FETCH_ASSOC);
       echo "{$row['admin']}<br/>";
        }
        else{
           die("Error Occured<br/>");
        }
?>

我正在使用mysql。

第一个问题

我正在使用上面的代码检查我的数据库中的用户名和密码 if($ result)我不需要它,如果$ stmt被执行则返回true但是无论如何我可以检查查询是否有任何结果? 我在stackoverflow上阅读了其中一个Q / A,其中说使用 $ stmt-&gt; rowCount()并不一定返回所需的结果还有其他简单吗对这一条评论的解决方法建议使用if($ stmt-&gt; fetch()&gt; 0)这种方法是否正确?

第二个问题

我使用$ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)获取当前行;  我得到错误说未定义index.at排队

  

echo“{$ row ['admin']}”;

我使用print_r($ row)时,我只得到2列而不是第3列。

对于这个愚蠢的问题感到抱歉,但这是我之前在代码中使用的任何PDO语句的结果。(我正在学习php)

我已经浏览了这些链接 Link 1 Link 2

2 个答案:

答案 0 :(得分:3)

您实际上并未在查询中选择该值。您只是选择regnopassword

$stmt=$db->prepare("SELECT regno,password FROM placement.authenticate 
            WHERE regno = ? AND password = ? LIMIT 1");       

需要成为:

$stmt=$db->prepare("SELECT regno,password,admin FROM placement.authenticate 
            WHERE regno = ? AND password = ? LIMIT 1");       

答案 1 :(得分:2)

为什么您希望从查询中获得3列?

SELECT regno,password FROM placement.authenticate etc...
       ^^^^^^^^^^^^^^

您只需获取这两个指定的列。 admin结果中没有$row结果,因为您没有告诉数据库获取它。例如你需要

SELECT regno,password,admin etc...
                     ^^^^^^---you need this