SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.11.2009 00:51:54

Boron1987
Участник
Зарегистрирован: 01.07.2009
Сообщений: 6

РНР - если записи нет, то делаем А, если есть, то делаем Б

Доброго времени суток!

Столкнулся с проблемой. Если есть в таблице запись, надо сделать UPDATE, если записи нет INSERT INTO. В интернете рекомендвали такое решение, но на моей машине всегда выводится UPDATE, т.е. решение не работает.

Код:

$sql  = "SELECT * ";
$sql .= "FROM plugins_list ";
$sql .= "WHERE short_name = '".$_POST['short_name']."' ";
$query = mysql_query($sql);

if(!$query)
{
  echo INSERT INTO;
}
else
{
  echo UPDATE;
}

Кто-то может подсказать как решить эту задачу?

Неактивен

 

#2 23.11.2009 02:58:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: РНР - если записи нет, то делаем А, если есть, то делаем Б

Вопросы по PHP следует задавать на http://webew.ru

P.S. Подсказка - что возвращает функция mysql_query() и как это связано с кол-вом строк в выборке?

P.P.S. Возможно для решения вашей задачи подойдет INSERT ... ON DUPLICATE KEY UPDATE или REPLACE

Неактивен

 

#3 23.11.2009 13:25:15

Boron1987
Участник
Зарегистрирован: 01.07.2009
Сообщений: 6

Re: РНР - если записи нет, то делаем А, если есть, то делаем Б

Вопросы по PHP следует задавать на http://webew.ru

Спасибо за рекомендацию! Думал, что тут найдутся и РНР специалисты, поэтому решил спросить именно на этом форуме + существует вероятность того, что подскажут альтернативное решение средствами самого MySQL (именно этот случай). smile

P.S. Подсказка - что возвращает функция mysql_query() и как это связано с кол-вом строк в выборке?

Если запрос не находит записей, то mysql_query() возвращает false, если же находит, то возвращается результат запроса. Но на локальной машине пробовал писать условие:

Код:

if($query == false)
{
  ...
}

Резултат тоже неадекватный (или интерпретатор любой результат запроса воспринимает как false, или наоборот, за не false - не помню какой вариант именно, но вообщем при любом запросе воспринимает его результат одинаково).

P.P.S. Возможно для решения вашей задачи подойдет INSERT ... ON DUPLICATE KEY UPDATE или REPLACE

Vasya, спасибо за подсказку! Именно INSERT ... ON DUPLICATE KEY UPDATE решил мою проблему! tongue

P.S. Мало ли кто столкнётся с моей проблемой, решение такое (заместо кода в первом сообщении):

Код:

$sql  = "INSERT INTO plugins_list ";
$sql .= "SET short_name = '".$_POST['short_name']."', ";
$sql .= "is_active = 1 ";
$sql .= "ON DUPLICATE KEY UPDATE ";
$sql .= "short_name = '".$_POST['short_name']."', ";
$sql .= "is_active = 1 ";
$query = mysql_query($sql);

Спасибо ещё раз, и хорошего тебе дня! wink

Отредактированно Boron1987 (23.11.2009 13:27:31)

Неактивен

 

#4 23.11.2009 13:34:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: РНР - если записи нет, то делаем А, если есть, то делаем Б

Boron1987 написал:

P.S. Подсказка - что возвращает функция mysql_query() и как это связано с кол-вом строк в выборке?

Если запрос не находит записей, то mysql_query() возвращает false, если же находит, то возвращается результат запроса.

http://www.php.su/functions/?mysql-query
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки. Значение не равное FALSE говорит о том, что запрос был выполнен успешно. Он не говорит о количестве затронутых или возвращённых рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson