Можно ли сделать это только с одним sql?

0

Я хочу иметь запрос вставки, но перед вставкой я проверяю, используется ли имя пользователя и адрес электронной почты кем-то другим. Если используется, я хочу отменить запрос вставки и эхо-сообщение, чтобы сказать, используется ли имя пользователя или адрес электронной почты.

Вот мой код:

$sql = "SELECT 1 FROM user WHERE username='".$_POST['username']."'";
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result))
    die('This username is already exists');
$sql = "SELECT 2 FROM user WHERE email='".$_POST['email']."'";
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result))
    die('This email address is already exists');
$sql = "insert into user (username,email,password,tel,type) values ('".$_POST['username']."','".$_POST['email']."','".$_POST['password']."','".$_POST['telnumber']."','member')";
if(!mysql_query($sql))
    die(mysql_error());

Я хочу, чтобы эти три sql-заявления были в одном. Это может быть либо использование случаев, либо что-то еще, что вы предлагаете. Итак, можно ли почерпнуть этот код в один SQL-запрос?

В результате мне нужно

sql = "sql_query"
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result)){
if($row['result']==1)
    die('This username is already exists');
else if($row['result']==2)
    die('This email is already exists');
}
die('you have succesfully registered');

спасибо за любой совет.

  • 0
    Если вы можете объяснить, чего вы хотите достичь и что вы делаете на простом языке, люди, не являющиеся php, также смогут помочь, и php-люди смогут легко понять
  • 6
    Маленькие Бобби Столы?
Показать ещё 2 комментария
Теги:

3 ответа

2
Лучший ответ

Хотя я предлагаю вам следовать ответу @cularis, вас может заинтересовать следующая альтернатива:

  1. Дайте email и username ограничение UNIQUE, создав уникальный индекс для обоих из них.
  2. запустите запрос INSERT, и если это не удается... (из-за дубликатов ключей)
  3. запустите предлагаемый комбинированный SELECT, чтобы определить, какое поле существует (имя пользователя или адрес электронной почты)
  • 0
    это лучшее решение на сегодняшний день
1

Вы можете комбинировать первые два запроса следующим образом:

$sql = "SELECT * FROM user WHERE username='".$_POST['username']."' OR email='".$_POST['email']."'";

Посмотрите на строку mysql_real_escape, чтобы санировать ваши данные.

  • 0
    Но с этим запросом я не могу заметить, используется ли имя пользователя или адрес электронной почты.
  • 0
    Конечно, вы проверяете, что возвращается запросом, и узнаете, является ли это адрес электронной почты, имя пользователя или оба.
Показать ещё 5 комментариев
1

Предполагая, что вас не интересует более конкретный случай ошибки, вы могли бы просто сделать следующее:

$sql = "SELECT * FROM user WHERE username='".$_POST['username']."' OR email='".$_POST['email']."'";
if(!$result = mysql_query($sql))
    die(mysql_error());
while($row = mysql_fetch_array($result))
    die('The username or email address is already being used');
$sql = "insert into user (username,email,password,tel,type) values ('".$_POST['username']."','".$_POST['email']."','".$_POST['password']."','".$_POST['telnumber']."','member')";
if(!mysql_query($sql))
    die(mysql_error());

Это не лучший дизайн, если вы ищете, как я уже сказал, конкретные случаи ошибок. Поэтому, если вы в порядке, просто сообщив человеку, есть ошибка, что один или оба используются, тогда это должно сработать.

Я не уверен, поскольку я очень ржавый в PHP/MySQL, но я предполагаю, что если такие случаи существуют, то могут быть возвращены несколько строк, и я точно забуду, как работает mysql_fetch_array, но я предполагаю, что это массив всех результатов, действительных для запроса, так что вы должны быть установлены. Пока массив существует, вы знаете, что в дБ был хит.

  • 0
    можешь посмотреть на мой вопрос еще раз?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню