Страница 1 из 1

Скрипт для исключения повторяющихся значений

Добавлено: 13 янв 2012, 20:28
Cadmy
Пишу php скрипт, который в случае если подобная запись уже есть в базе данных не записывает снова. Сначала запрос к базе возвращающий 1 при наличии такой же записи. Затем если значение запроса не равно 1, тогда делаю запись. При помощи echo вывожу одно из записываемых значений. Однако, возвращаемый результат представляет собой ошибку следующего вида

Код: Выделить всё

<br /><b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/home/h19159/data/www/aaa.ru/l.php</b> on line <b>36</b><br />1111
И данные, все равно, записываются в базу. Предполагаю, что ошибка в сравнение значения запроса и единицы. Поставил (int), но ен помогло. Помогите корректо составить сравнение.
Вот код:

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";       // обычно не нужно изменять$db_user="****";        // имя пользователя БД$db_password="****";        // пароль БД$db_name = "****";      // имя БД$table_name = "m";      // имя таблицы статистики. Если вы не меняли его в запросе, создающем БД, то и здесь менять его не надо// данные приложения$app_id = '****'; // id приложения$api_secret = '****'; // защищенный ключ приложения  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];$like_id = $_POST['like_id'];     // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'select max(1) as "ex"              from '.$table_name.'`              where EXISTS (                        SELECT *                        FROM `'.$table_name.'`                        WHERE `id` ='.$viewer_id.'                        and `like` ='.$like_id.'                    )';    $sql = @mysql_query($query);    $res=mysql_fetch_array($sql);     if ((int)$res[ex]!=1) {        $query = 'INSERT INTO `'.$table_name.'` (`id`, `like`) VALUES ("'.$viewer_id.'","'.$like_id.'")';        $sql = @mysql_query($query);        echo $like_id;    }   ?>

Re: Скрипт для исключения повторяющихся значений

Добавлено: 13 янв 2012, 20:35
Александр
UNIQUE KEY не подходит?

Re: Скрипт для исключения повторяющихся значений

Добавлено: 14 янв 2012, 08:37
bodnar
Cadmy писал(а):Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение
insert ... on duplicate key update ...

Re: Скрипт для исключения повторяющихся значений

Добавлено: 14 янв 2012, 11:06
Cadmy
bodnar писал(а):
Cadmy писал(а):Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение
insert ... on duplicate key update ...
А duplicate key разве будет проверять оба записываемых значений или только ключевое поле?

Re: Скрипт для исключения повторяющихся значений

Добавлено: 14 янв 2012, 11:29
bodnar
on duplicate key update
он проверит ключевое поле, если такого нет создаст новую запись, если есть обновит существующую

з.ы. ключ может быть и составным, но это не тру

Re: Скрипт для исключения повторяющихся значений

Добавлено: 14 янв 2012, 21:40
Cadmy
Спасибо, теперь все кашерно