从mysql切换到mysqli问题

时间:2013-09-12 22:24:16

标签: php mysql mysqli

下面是一些工作正常的代码,但是它使用了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无关。当我尝试登录我的表单时不会显示任何错误,也不会推送到下一页,所以我知道这一点就是问题

2 个答案:

答案 0 :(得分: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 不应包含在每个方法中,但只能。而DB处理程序应该分配给构造函数中的类变量。

答案 1 :(得分:-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()之后;行打印出确切的返回内容。