2014-10-04 7 views
0

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

Что происходит: после отправки формы новая запись вставляется в базу данных каждый раз. Даже если это дубликат.

UPDATE: Я добавил столбец под названием «u_id», который содержит уникальную информацию для каждого контакта в базе данных. Итак, я сделал эту колонку с уникальным ключом.

if($_POST['submit']){ 
     $con=mysqli_connect("localhost","username","password","database_name"); 
     // Check connection 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    $contact = ($_POST['contact']); 
    $u = ($_POST['uid']); 
    $org = mysql_real_escape_string($_POST['organization']); 
    $namefirst = mysql_real_escape_string($_POST['firstName']); 
    $namelast = mysql_real_escape_string($_POST['lastName']); 
    $emailaddy = mysql_real_escape_string($_POST['email']); 
    $phonenum = mysql_real_escape_string($_POST['phone']); 
    $appquestion = mysql_real_escape_string($_POST['appquestion']); 
    $banner = mysql_real_escape_string($_POST['banner']); 
    $bulletin = mysql_real_escape_string($_POST['bulletin']); 
    $giveaway = mysql_real_escape_string($_POST['giveaway']); 
    $app = mysql_real_escape_string($_POST['app']); 
    $tshirt = mysql_real_escape_string($_POST['tshirt']); 
    $tshirtp = mysql_real_escape_string($_POST['tshirtp']); 
    $print = mysql_real_escape_string($_POST['print']); 
    $party = mysql_real_escape_string($_POST['party']); 
    $orgnotes = mysql_real_escape_string($_POST['notes']); 


    $sql="INSERT INTO database_name (contact_id, u_id, first_name, last_name, email_address, phone_number, org, appquestion, banner, bulletin, giveaway, app, tshirt, promised_tee, print, party, org_notes) 
     VALUES 
      ('$contact', '$u', '$namefirst','$namelast','$emailaddy','$phonenum','$org','$appquestion','$banner','$bulletin','$giveaway','$app','$tshirt','$tshirtp','$print','$party','$orgnotes') 

     ON DUPLICATE KEY UPDATE first_name = '$namefirst', last_name = '$namelast', email_address = '$emailaddy', phone_number = '$phonenum', org = '$org', appquestion = '$appquestion', banner = '$banner', bulletin = '$bulletin', giveaway = '$giveaway', app = '$app', tshirt = '$tshirt', promised_tee = '$tshirtp', print = '$print', party = '$party', org_notes = '$orgnotes'" ; 



    if (!mysqli_query($con,$sql)) 
    { 
     die('Error: ' . mysqli_error($con)); 
    } 
     echo "1 record added"; 



    mysqli_close($con); 
    } 

Из всего, что я прочитал, что нужно использовать дублирование KEY UPDATE, чтобы заменить старую информацию с новой информацией в базе данных после отправки формы. Пока часть вставки моего кода работает, часть с ON DUPLICATE KEY UPDATE не работает.

Зачем нужна эта часть кода? Есть ли лучший способ вставить еще обновление информации?

Я также попытался ЗАМЕНИТЬ INTO (вместо INSERT и ON DUPLICATE KEY UPDATE), это тоже не сработало. Вот моя структура столбец в моей базе данных MySQL:

+-------------+-------------+------+-----+-----------+-------------------+ 
Field   | Type  | Null | Key | Default | Extra 
+-------------+-------------+------+-----+-----------+-------------------+ 
contact_id | int(1)  | NO | PRI | NULL  | auto_increment 
u_id   | char(32) | NO | UNI | NULL  | 
title   | varchar(80) | NO |  | NULL  | 
first_name | varchar(100)| NO |  | NULL  | 
last_name  | varchar(100)| NO |  | NULL  | 
job_title  | varchar(255)| NO |  | NULL  | 
address_1  | varchar(255)| NO |  | NULL  | 
address_2  | varchar(255)| NO |  | NULL  | 
org_city  | varchar(100)| NO |  | NULL  | 
org_state  | varchar(100)| NO |  | NULL  | 
zip_code  | varchar(8) | NO |  | NULL  | 
country  | varchar(100)| NO |  | NULL  | 
phone_number | varchar(15) | NO |  | NULL  | 
email_address | varchar(100)| NO |  | NULL  | 
org   | varchar(150)| NO |  | NULL  | 
appquestion | tinyint(1) | NO |  | NULL  | 
banner  | tinyint(1) | NO |  | NULL  | 
bulletin  | tinyint(1) | NO |  | NULL  | 
giveaway  | tinyint(1) | NO |  | NULL  | 
app   | tinyint(1) | NO |  | NULL  | 
tshirt  | tinyint(1) | NO |  | NULL  | 
promised_tee | tinyint(1) | NO |  | NULL  | 
print   | tinyint(1) | NO |  | NULL  | 
party   | tinyint(1) | NO |  | NULL  | 
org_notes  | varchar(255)| NO |  | NULL  | 
notes   | varchar(255)| NO |  | NULL  | 
+-------------+-------------+------+-----+-----------+-------------------+ 

Спасибо за любую помощь или руководство вы можете дать мне! Я новичок в PHP и MySQL. Я работаю над этой концепцией в течение трех дней и прочитал массу информации об этом, но до сих пор не могу заставить ее работать.

+0

Вы можете дважды проверить, если contact_id действительно установлен как первичный ключ и, следовательно, уникальный. С этими ограничениями не должно быть двух записей с contact_id = '. – Barry

+0

Привет Барри! Благодарю за ваш ответ. Я дважды проверял, и contact_id действительно задан как первичный ключ, а также уникален. – MissScarlett

+0

Правильно ли Kartik, что вы определили column_id как AUTO INCREMENT? И что контакты оба добавляются с другим contact_id? – Barry

ответ

1

Я предполагаю, что контактный идентификатор - это ваш Ключ, и это значение идентичности, которое автоматически увеличивается? В этом случае попробуйте эту инструкцию insert.

INSERT INTO database_name (first_name, last_name, email_address, phone_number, org, appquestion, banner, bulletin, giveaway, app, tshirt, promised_tee, print, party, org_notes) VALUES ('$namefirst','$namelast','$emailaddy','$phonenum','$org','$appquestion','$banner','$bulletin','$giveaway','$app','$tshirt','$tshirtp','$print','$party','$orgnotes')
ON DUPLICATE KEY UPDATE first_name = '$namefirst', last_name = '$namelast', email_address = '$emailaddy', phone_number = '$phonenum', org = '$org', appquestion = '$appquestion', banner = '$banner', bulletin = '$bulletin', giveaway = '$giveaway', app = '$app', tshirt = '$tshirt', promised_tee = '$tshirtp', print = '$print', party = '$party', org_notes = '$orgnotes'" ;

+0

Можете ли вы, пожалуйста, обновить структуру таблицы ?. я немного запутался с KEYS – Kartik

+0

Я думаю, что это никогда не запустит часть ON DUPLICATE, потому что ключ не включен в инструкцию insert, что делает часть ON DUPLICATE избыточной. – Barry

+0

Пожалуйста, обратитесь к первому ответу, и есть другие варианты. http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – Kartik

Смежные вопросы