-1

下面是一些运行良好的代码,但是它使用了 mysql_*,我不再想要了。我试图在 mysqli 中重做这一部分,但它不起作用。如果您愿意,我可以发布我的整个代码,但我确定我知道问题出在哪里。下面是代码:

老的:

public function verifyDatabase()
    {
        include('dbConfig.php');

        $data = mysql_query("SELECT client_id FROM clients WHERE client_email_address = '{$this->_username}' AND client_password = '{$this->_pass_sha1}'");

        if(mysql_num_rows($data))
        {
            list($this->_id) = @array_values(mysql_fetch_assoc($data));
            return true;
        }
        else 
        {
            return false;
        }
    }

新的:

public function verifyDatabase()
    {
        include('dbConfig.php');

        $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1");
        $data->bind_param($this->_username, $this->_pass_sha1);
        $data->execute();
        $data->store_result();

        if($data->num_rows)
        {
            list($this->_id) = @array_values($data->fetch());
            return true;
        }
        else 
        {
            return false;
        }
    }

我还在学习 mysqli,还没有为 PDO 的东西做好准备,因为我发现这有点令人困惑。正如我所说,这整个脚本与 mysql_* 完美配合,但与 mysqli 配合得不太好。当我尝试登录时,我的表单没有显示任何错误,也没有推送到下一页,所以我知道这就是问题所在

4

2 回答 2

0

建议使用辅助函数无论是旧 mysql 还是现代 mysqli

public function verifyDatabase()
{
    $sql = "SELECT client_id FROM clients WHERE email = ? AND password = ?";
    return $this->db->getOne($sql ,$this->_username,$this->_pass_sha1);
}

另请注意,dbConfig.php不应包含在 every 方法中,而应仅包含一次。而 DB 处理程序应分配给构造函数中的类变量。

于 2013-09-13T04:48:53.107 回答
-1

将您的代码更改为此。我并不是说它会解决问题,但会更好。

public function verifyDatabase()
{
    include('dbConfig.php');

    $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1");
    $data->bind_param($this->_username, $this->_pass_sha1);
    $data->execute();
    $data->store_result();

    if($data->num_rows > 0)
    {
        $result = $data->fetch();
        $this->_id = $result['client_id'];
        return true;
    }
    else 
    {
        return false;
    }
}

你也可以把 var_dump($result); 在 $result = $data->fetch(); 之后 行打印出返回的确切内容。

于 2013-09-12T22:34:54.720 回答