У меня есть этот код:
$sql=mysqli_query($con,"SELECT username, password, email FROM users WHERE username=$username");
if(mysqli_num_rows($sql)>=1)
{
echo "<div class='form'>
<h3>Username already in use.</h3></div>";
}
При использовании этого кода он возвращает следующее предупреждение:
Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, логическим значением, заданным в ...
Почему отображается это предупреждение и как его исправить?
2 ответа
Вы неправильно выполняете свой запрос. Это подвержено ошибкам и всегда будет давать вам такие ошибки. Более того, он также подвержен SQL-инъекциям.
Когда вы добавляете переменную непосредственно в запрос, ее содержимое может мешать, что приведет к множеству проблем, от такой ошибки до SQL-инъекции. Чтобы избавиться от таких ошибок раз и навсегда, вы должны сначала подготовить свой запрос, добавив вопросительный знак вместо переменной, а затем отправить его отдельно. Так никогда не помешает.
Вы должны сначала подготовить свой запрос, затем привязать переменную, а затем выполнить:
$sql = "SELECT username, password, email FROM users WHERE username=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("s", $username);
$stmt->execute();
$res = $stmt->get_result();
if($res->num_rows())
{
echo "<div class='form'>
<h3>Username already in use.</h3></div>";
}
Если вы посмотрите документацию по методу mysqli_query
, вы увидим, что при сбое запроса метод возвращает False
. Это то, что происходит в вашем примере. Затем вы передаете это логическое значение в mysqli_num_rows
, что объясняет сообщение об ошибке.
Чтобы решить эту проблему, вам нужно выполнить некоторую проверку ошибок. По крайней мере, проверьте, не вернул ли mysqli_query
False
, прежде чем переходить к остальной части вашего кода.
Если вы делаете что-то большее, чем просто экспериментируете на своем локальном компьютере, вероятно, лучше всего сделать то, что ваш здравый смысл предлагает в своем ответе, и использовать подготовленные утверждения.
Похожие вопросы
Связанные вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.