ON DUPLICATE KEY UPDATE создание новых записей - PullRequest
0 голосов
/ 30 декабря 2011

У меня проблемы со следующим кодом, кажется, он работает и создает записи просто отлично, проблема заключается в том, что каждый раз, когда я нажимаю "Отправить", вместо обновления записи он просто создает новую.Если я отключаю автоинкрементный для первичного ключа, он просто обновляет запись, но не создает никаких новых, кажется, либо один, либо другой: -S

<?php
 $query = mysql_query("
  INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   ('$_POST[cf_id]','$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]')
  ON DUPLICATE KEY UPDATE
   datesent='$_POST[datesent]';
 ") or die(mysql_error());
 ?>

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

вы уже пытались повторить строку запроса?угадайте, что замена переменной внутри это неправильно.попробуйте что-нибудь подобное для отладки:

<?php
 $sql = "INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   ('{$_POST['cf_id']}','{$_POST['cf_uid']}','{$_POST['emailformname']}','{$_POST['datesent']}')
  ON DUPLICATE KEY UPDATE
   datesent='{$_POST['datesent']}'";
 echo $sql; // for debugging
 $query = mysql_query($sql) or die(mysql_error());
 ?>

Обратите внимание на исправленные имена переменных выше.(фигурные скобки вокруг него, кавычки вокруг индекса массива)

0 голосов
/ 30 декабря 2011

Не могу себе представить, что это проблема, но происходит ли то же самое, когда вы приводите идентификатор к int и пропускаете кавычки?

<?php
 $query = mysql_query("
  INSERT INTO hqfjt_chronoforms_data_emailform 
   (cf_id,cf_uid,emailformname,datesent)
  VALUES
   (" . (int) $_POST['cf_id'] . ",'$_POST[cf_uid]','$_POST[emailformname]','$_POST[datesent]')
  ON DUPLICATE KEY UPDATE
   datesent='$_POST[datesent]';
 ") or die(mysql_error());
 ?>

Кстати, вы действительно не должны использовать переменные $_POST в своем запросе без mysql_real_escape_string или, что еще лучше, использовать подготовленные операторы (PDO или mysqli).

...