Подскажите в чем ошибка, не хочет работать скрипт $res = mysql_query ("SELECT id FROM dostup WHERE id_acc='$id'",$db); if (!$res) { mysql_query ("INSERT INTO dostup (ip,putdate,id_acc,browsers,systems) VALUES ('$ip', NOW( ) , '$id', '$browser', '$os')"); } else { $myrow_dostup = mysql_fetch_array ($res); $id_str = $myrow_dostup ["id"]; mysql_query ("UPDATE dostup SET ip='$ip', putdate=NOW(), id_acc='$id', browsers='$browser', systems='$os' WHERE id='$id_str'"); } если в БД есть запись с необходимым id то все ок запись обновляется. Но если записи нет то новая запись не вносится. При этом ни каких ошибок не показывает. Если закоментировать все кроме вставки новой запись запись вставляется. Пробовал вызвать вывод ошибки (mysql_error()) ничего не выводит. Используется сборка apache2.2.10+php5.2.6+mysql5.0.67+phpmyadmin3.0.1.1
[sql]INSERT mytable SET id = 1, name = 'name' ON DUPLICATE KEY UPDATE name = 'new_name'[/sql] Если id - pk
ни фига не вьежаю в этот ON DUPLICATE KEY UPDATE "если производится вставка строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то вполняется UPDATE старой строки" не пойму как формируется последний параметр id_acc - поставил как уникальный я прописал так: INSERT INTO dostup SET (ip,putdate,id_acc,browsers,systems) VALUES ('$ip', NOW( ) , '$id', '$browser', '$os') ON DUPLICATE KEY UPDATE id_acc='$id' - не работает не понял что значит: Если id - pk и мб REPLACE? id у меня авто-инкремент и первичный
[sql]mysql> create table test (id int auto_increment primary key, name tinytext) engine = innodb; Query OK, 0 rows affected (0.32 sec) mysql> desc test; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | tinytext | YES | | NULL | | +-------+----------+------+-----+---------+----------------+ 2 rows in set (0.04 sec) mysql> insert test set id = 1, name = 'petruha'; Query OK, 1 row affected (0.02 sec) mysql> select * from test; +----+---------+ | id | name | +----+---------+ | 1 | petruha | +----+---------+ 1 row in set (0.00 sec) mysql> insert test set id = 1, name = 'Golishev' on duplicate key update name = 'Golishev'; Query OK, 2 rows affected (0.04 sec) mysql> select * from test; +----+----------+ | id | name | +----+----------+ | 1 | Golishev | +----+----------+ 1 row in set (0.00 sec)[/sql]
Спасибо! Теперь разобрался с данным спрособом запроса к базе. Но у меня фишка заключается в следуюшем: С использованием данного типа запроса получается, что поле id_acc (идентификатор записи из другой таблици) должен быть уникальным. Но данная таблица нужна для регистрации данных по посетителю, при этом посетитель может быть зарегистрированным на сайте, в связи с чем у него присвоен id_acc (его идентификатор) а может быть и не зарегистрированным и у него нет id_acc и данное поле должно быть пустое (нулевое) и естественно таких записей будет не одна.