【问题标题】:Empty Array when executing the SQL statement using PDO使用 PDO 执行 SQL 语句时的空数组
【发布时间】:2014-08-13 05:08:48
【问题描述】:

我正在关注 MVC 教程,但我陷入了无法更进一步的境地。

问题在于,当我执行 SQL 语句时,我试图获取值并打印/回显它。

我有一个正在实现的功能。这是它的代码:

注意:我使用 filter_input() 方法来获取 $_POST(['login']) 和 $_POST(['password'])。出于某种原因,我不能直接使用 $_POST() 方法,因为它会警告我不要直接访问超全局 $_POST。

我不确定这里到底是什么问题。我得到了零,实际上我在数据库中有一个条目。

public function run(){

        $login =         filter_input(INPUT_POST, 'login');
        $password =      filter_input(INPUT_POST, 'password');

        $sth = $this->db->prepare("SELECT id FROM users WHERE 
                login = :login AND password = MD5(:password)");
        $sth->execute(array(
            ':login' => $login,
            ':password' => $password
        ));

        $data = $sth->fetchAll(); 
        print_r($data);
    /*$count = $sth->rowCount();
    print_r($count);

    if($count>0){

        echo 'Have a record.';

    }else{

        echo 'No Record found.';

    }*/

    }

如果有人能帮我找到问题,我将不胜感激。

【问题讨论】:

  • 如果有人投了反对票,最好添加评论说明反对票的原因。

标签: php pdo


【解决方案1】:

直接来自manual

PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。

更新后:试试下面,

 $sth = $this->db->prepare("SELECT id FROM users WHERE 
                login = :login AND password = :password");

 $sth->execute(array(
            ':login' => $login,
            ':password' => md5($password)
        ));
 $data = $sth->fetchAll(); 

【讨论】:

  • 没错..:) 但即使我删除计数,数组仍然为零,如果取消注释行 $data = $sth->fetchAll();,我可以看到数组值为零。我使用 count 方法只是为了测试我是否真的得到了值。
  • 首先执行md5,然后绑定该变量refer
  • 谢谢 Rikesh.. 但我对 php 不太熟悉,只是在学习.. 你能告诉我我应该怎么做.. 这会很有帮助。
猜你喜欢
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2013-02-06
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多