2
Я довольно новичок в MySQL. Учитывая эту таблицу:MySQL эффективный запрос
ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
User_name VARCHAR(35) NOT NULL,
Full_name VARCHAR(55) NOT NULL,
User_vars VARCHAR(255) NOT NULL,
BirthDay DATE NOT NULL,
password CHAR(70) NOT NULL,
Security_hint VARCHAR(27) NOT NULL,
Email VARCHAR(225) NOT NULL,
userType ENUM ('a','b','c','d') NOT NULL DEFAULT 'a',
Signup_Date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
activation TINYINT(1) UNSIGNED NOT NULL,
Ip BINARY(16) NOT NULL,
PRIMARY KEY (ID),
UNIQUE KEY User_name (User_name,Email)
Я использую следующие запросы для проверки, существует ли адрес электронной почты или имя пользователя в этой таблице:
$query1 ="SELECT id FROM signup WHERE Email='$Email_Input' LIMIT 1";
$result1 = mysql_query($query1)
$query2 = "SELECT id FROM signup WHERE User_name='$User_name' LIMIT 1";
$result2 = mysql_query($query2);
if (mysql_num_rows($result2)>0){
echo '1';
}
else if (mysql_num_rows($result1)>0){
echo '1';
}
Мой вопрос: Есть ли эффективный способ выдавать только один запрос проверить существование обоих?
'WHERE Email = AND User_name =' было бы лучше, так как у вас также есть сложенный индекс для этих столбцов. – Mihai
Я считаю, что ваш код уязвим для SQL-инъекции. Используйте готовые заявления вместо того, чтобы вводить введенное значение прямо в строку запроса. –
Все мои переменные хранят отфильтрованные и дезинфицированные данные против XSS и SQL-инъекций – Tim