org我试图让这个查询正确。我想在表单提交时将记录插入数据库,但只有在记录不存在的情况下。如果记录存在,那么我希望它在数据库中更新。我如何更新一个行,如果它存在,或者如果它不存在在mysql中创建一个新的行
正在发生的事情:在表单提交,一个新的记录每一次插入到数据库中。即使它是重复的。
更新:我添加了一个所谓的“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);
}
一切从我读,我需要使用对重复密钥更新,以取代与在表单提交数据库中的新信息的旧信息。当我的代码的插入部分正在工作时,具有ON DUPLICATE KEY UPDATE的部分不起作用。
为什么这部分代码不能正常工作?有没有更好的方法来插入其他更新信息?
我也试过REPLACE 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的新手。我一直在研究这个概念三天,并阅读了大量有关它的信息,但我仍然无法使其工作。
你能仔细检查,如果CONTACT_ID确实设置主键,因此唯一的。有两条contact_id ='的记录不应该有这些限制。 – Barry 2014-10-04 15:23:50
嗨巴里!感谢您的答复。我进行了双重检查,并且contact_id确实设置为主键,也是唯一的。 – MissScarlett 2014-10-04 15:39:05
Kartik是否将column_id定义为AUTO INCREMENT?并且联系人都添加了不同的contact_id? – Barry 2014-10-04 15:40:44