SQL num_row возвращает 0, даже если строка существует

Вот мой скрипт php .. сначала он вставляет строку данных в базу данных. Затем он снова берет эту строку (в том же сценарии). Но теперь он возвращает 0 строк. Однако введенная строка существует в базе данных.

А также есть две строки, которые были созданы при создании базы данных. если я напишу запрос, чтобы получить эти старые строки, он вернет значения без проблем. Также хорошо работают serverID и UserID.

$conn = new mysqli($sever, $uname, $pass, $dbname);
if ($conn->connect_error) {
  die("Internal Server Error!");
}

//add new row
$un = $_POST['uname'] ;
$ue =  $_POST['uemail'];
$up = $_POST['upass'];
$sql = "INSERT INTO TBuser (username, email, password, serverID) 
  VALUES('" . $un . "',' " . $ue . "',' " . $up . "', '1')";
$conn->query($sql);

if ($conn->query($sql) === FALSE) {
  die("Internal Server Error! Ex000105 0 <br>" .
                        mysqli_error($conn) . '<br>'. $sql);
}

$sql = "SELECT * FROM TBuser WHERE email LIKE '" . $ue . "'";

$results = $conn->query($sql);
if ($results->num_rows == 0) {
  die("Internal Server Error! Ex000105 1". 
  mysqli_error($conn) . '<br>'.       sql . '<br>' 
  . mysqli_error  ($conn) . '<br>'. $results->num_rows );     

 }

А вот и моя таблица. Первые две строки создаются другим скриптом php при создании базы данных. Третья строка создается указанным выше сценарием.

mysqli_error($conn) did not return any error message.

Array ( [userID] => 1 [username] => namindu [email] => [email protected] [password] => oh!mygod [serverID] => 1 ) 
Array ( [userID] => 2 [username] => kamal [email] => [email protected] [password] => oh!mygod [serverID] => 1 ) 
Array ( [userID] => 56 [username] => Namindu [email] => [email protected] [password] => k [serverID] => 1 ) 

Спасибо за помощь.

Очень важно, чтобы вы никогда хранит пароли в виде открытого текста. вместо этого взглянули на password_hash() и password_verify(). Также используйте подготовленные заявления, чтобы избежать SQL-инъекция.

Chris 30.03.2018 03:46

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

ArtisticPhoenix 30.03.2018 03:51

Спасибо, что рассказали мне об этом способе хранения паролей. На самом деле я не знал об этом @Chris

Namindu Ranatunga 01.04.2018 12:46

Спасибо. Я действительно этого не видел. @ArtisticPhoenix

Namindu Ranatunga 01.04.2018 12:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
47
1

Ответы 1

Вы видите это?

$sql = "INSERT INTO TBuser (username, email, password, serverID)VALUES('" . $un . "',' " . $ue . "',' " . $up . "', '1')";

Как насчет сейчас?

 ' " . $ue . "'

Пробел {электронная почта}, а затем без подстановочных знаков в поиске LIKE '" . $ue . "'. Однако у вас есть некоторые уязвимости SQLInjection.

Но для ясности:

   " $ue" != "$ue"   /// ie. email = ' [email protected]';

Если бы вы сделали LIKE '%".$ue."', вы бы не заметили всего этого. У вас также есть еще один ' ".$up."' для пароля, почти наверняка это тоже создаст несколько проблем. Но вы можете исправить все это, используя "Подготовленные заявления", потому что с подготовленными операторами вы просто вставляете ? для mysqli, и никаких кавычек ....

P.S. ничего страшного, если вы этого не видели. У меня ушло несколько минут, прежде чем я сказал "ах-ха"

Другие вопросы по теме