#php #mysql #mysqli
#php #mysql #mysqli
Вопрос:
Скрипт работал нормально, добавляя новых пользователей, прежде чем я добавил код, чтобы проверить, существует ли пользователь уже в базе данных, и это та часть, которую я не могу понять, почему она не работает. Это тестовая среда только для приложений Android, поэтому я предпочитаю самую простую версию.
<?php
require_once 'connect_db.php';
$conn = new mysqli($hostname, $admin_name, $admin_pwd, $database);
if($conn->connect_error) {
die($conn->connect_error);
}
if(isset($_REQUEST["username"]) amp;amp; isset($_REQUEST["email"]) amp;amp; isset($_REQUEST["password"]) amp;amp; isset($_REQUEST["user_type"])) {
echo "Welcome ". $_REQUEST['username']. "<br />";
$name = $_REQUEST['username'];
$email = $_REQUEST['email'];
$pwd = $_REQUEST['password'];
$user_type = $_REQUEST['user_type'];
// first check if user already exists
$query = "SELECT 1 FROM users WHERE `EMAIL` = '$email'";
$result = $conn->query($query);
if (!$result) die("Database access failed: " . $conn->error);
if (mysqli_num_rows($result) > 0) {
echo "Error inserting user into database. User already exists";
} else {
// then do insert new user
$query_insert_user = "INSERT INTO users (`NAME`, `EMAIL`, `PWD`, `USER_TYPE`) VALUES ('$name', '$email', '$pwd', '$user_type')";
if ($conn->query($query_insert_user) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $query_insert_user . "<br>" . $conn->error;
}
}
$result->close();
$conn->close();
} else {
echo "Error inserting user into database. Missing user parameters";
}
?>
Комментарии:
1. Вы широко открыты для внедрения SQL. Вы используете mysqli, поэтому воспользуйтесь подготовленными инструкциями и bind_param . Проверьте наличие ошибок mysqli вместо проверки правильности запроса.
2. попробуйте удалить эту строку: if (!$result) die(«Сбой доступа к базе данных: » . $ conn-> ошибка);
Ответ №1:
измените строку
$query = «ВЫБЕРИТЕ 1 ИЗ пользователей, ГДЕ EMAIL
= ‘$email'»;
Для
$query = «ВЫБЕРИТЕ 1 ИЗ пользователей, ГДЕ EMAIL
= ‘».$email.»‘ «;
Ответ №2:
Я не смог его протестировать, но на первый взгляд я бы предложил:
- измените свой запрос на предложение Джеспера (хотя » » должен расширить вашу переменную, но …)
- и может ли это быть использование
mysqli_num_rows($result)
when$result->num_rows
следует использовать для ООП? Взгляните на руководство по PHP mysqli-result.num-rows
Удачи.
Ответ №3:
Некоторый пример кода от друга просто работает. Я изменил на:
// first check if user already exists
$query = "SELECT 1 FROM users WHERE NAME = '$name' OR EMAIL = '$email'";
$result = mysqli_fetch_array(mysqli_query($conn,$query));
if (isset($result)){
echo 'username or email already exist';