Вот мой скрипт 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 )
Спасибо за помощь.
У вас есть лишнее пространство для вставки значений. И отсутствие подстановочных знаков % в поиске означает «нет совпадений». Но вы могли бы избежать всех этих и других проблем, используя подготовленные операторы ....
Спасибо, что рассказали мне об этом способе хранения паролей. На самом деле я не знал об этом @Chris
Спасибо. Я действительно этого не видел. @ArtisticPhoenix






Вы видите это?
$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. ничего страшного, если вы этого не видели. У меня ушло несколько минут, прежде чем я сказал "ах-ха"
Очень важно, чтобы вы никогда хранит пароли в виде открытого текста. вместо этого взглянули на
password_hash()иpassword_verify(). Также используйте подготовленные заявления, чтобы избежать SQL-инъекция.