我有以下普通的User类语句,我试图将其转换为准备好的语句。
public function didReceiveRequest($user_from) {
$user_to = $this->user['username'];
$check_request_query = mysqli_query($this->con, "SELECT * FROM friend_requests WHERE user_to='$user_to' AND user_from='$user_from'");
if (mysqli_num_rows($check_request_query) > 0) {
return true;
}
else {
return false;
}
}
我对准备好的语句并不陌生,并且在User类中的表现一直不错,但是仍然遇到一些麻烦。作为新手,我也不遵循逻辑,所以请放轻松。这是我到目前为止的内容:
public function didReceiveRequest($user_from){
$user_to = $this->user['username'];
$check_request = $this->con->stmt_init();
$check_request->prepare('SELECT * FROM friend_requests WHERE user_to=? AND user_from=?');
$check_request->bind_param('ss', $user_to, $user_from);
$check_request->execute();
$result = check_request->get_result();
$data = $result->fetch_assoc();
$check_request->free_result();
$check_request->close();
if($data > 0){
return true;
}else{
return false;}
}
因此,有几件事说明了这一点:1)我知道可能有一种更好,更有效的方法。 2)请问我返回的结果是否与以前(使用普通语句)返回的结果相同。我不想混淆来自相关页面的呼叫。
答案 0 :(得分:0)
在这里,您将如何使用MySqli准备的语句作为案例。
public function didReceiveRequest($user_from) {
$query = "SELECT *
FROM friend_requests
WHERE user_to = ? AND user_from = ?";
$user_to = $this->user['username'];
$stmt = $this->con->prepare($query);
$stmt->bind_param(ss, $user_to, $user_from); //set your bindings
$stmt->execute();
//$results = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);//Use if you want to see results.
if($stmt->num_rows !== 0) {
return TRUE;
}else{
return FALSE;
}
}
这是一个非常好的阅读链接,它教您如何在MySqli中使用预准备的语句。我会将此链接添加为书签并经常引用。 MySqli prepared statements
使用准备好的语句不会影响您从查询中接收结果的方式。
答案 1 :(得分:0)
我看到的提供的答案是$result = $stmt->get_result();
的不同之处再次是准备好的语句的新手,我不是100%认为这是上面的代码引发错误的原因,但是该代码有效。
public function didReceiveRequest($user_from) {
$user_to = $this->user['username'];
$stmt = $this->con->stmt_init();
$stmt->prepare('SELECT * FROM friend_requests WHERE user_to=? AND user_from=?');
$stmt->bind_param('ss', $user_to, $user_from);
$stmt->execute();
$result = $stmt->get_result();
$qty = $result->num_rows;
$stmt->free_result();
$stmt->close();
if($qty > 0) {
return true;
}else{
return false;
}
}