下面是一些工作正常的代码,但是它使用了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无关。当我尝试登录我的表单时不会显示任何错误,也不会推送到下一页,所以我知道这一点就是问题
答案 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()之后;行打印出确切的返回内容。