Преобразование нормального оператора OOP SQLi в подготовленный оператор - PullRequest
0 голосов
/ 14 октября 2018

У меня есть следующая нормальная инструкция класса 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) Будет ли то, что у меня, вернуть тот же результат, что и был (с нормальным утверждением) ранее.Я не хочу путать звонки со своих зависимых страниц.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Разница в том, что было предоставлено в качестве ответа, я вижу $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;
    }

}
0 голосов
/ 14 октября 2018

Вот как вы могли бы использовать подготовленные операторы 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 подготовленные заявления

Использование подготовленных утверждений не влияет на то, как вы получаете результаты по вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...