从 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。当我尝试登录时,我的表单没有显示任何错误,也没有向前推进到下一页,所以我知道这是问题所在

建议使用辅助函数,无论是旧的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 不应包含在 each 方法中,而应仅包含在一次中。而数据库处理程序应分配给构造函数中的类变量。

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

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;
    }
}

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

最新更新