【问题标题】:PHP/SQL After insert value to table and set one value as unique, no more values can be insertedPHP/SQL 向表中插入值并将一个值设置为唯一值后,不能再插入更多值
【发布时间】:2016-04-15 19:50:50
【问题描述】:

我尝试创建标准化数据库。

当我第一次插入值时,一切正常,但是(我认为将值设置为唯一的原因)它不想添加。

这是我的查询(如果需要,我也可以显示数据库)

$query = "INSERT INTO userMore (userEmailG, userGenderG, userAboutG, userBirthdayG, userLanguageG) values ('$userEmailG','$userGenderG', '$userAboutG', '$userBirthdayG', '$userLanguageG');";

$query .= "INSERT INTO userBasic (id_uM, userNameG, userEmailG) values ((SELECT id_uM FROM userMore WHERE userEmailG='$userEmailG'),'$userNameG', '$userEmailG');";

$query .= "INSERT INTO dvlaInfoMore (sixMonthRate, twelveMonthRate, wheelPlan, revenueWeight, typeApproval, taxStatus, taxed, taxDetails, mot, motDetails) values ('$sixMonthRate', '$twelveMonthRate', '$wheelPlan', '$revenueWeight', '$typeApproval', '$taxStatus', '$taxed', '$taxDetails', '$mot', '$motDetails');";

$query .= "INSERT INTO dvlaInfoBasic (id_uDInfoM, plateNumber, make, model, yearOfManufacture, cylinderCapacity, dateofFirstRegistration, co2Emissions, fuelType, colour, vin, transmission)
values (LAST_INSERT_ID(), '$plateNumber', '$make', '$model', '$yearOfManufacture', '$cylinderCapacity', '$dateofFirstRegistration', '$co2Emissions', '$fuelType', '$colour', '$vin', '$transmission');";

$query .= "INSERT INTO userLocation (latitude, longitude, postCode) values ('$latitude', '$longitude', '$postCode');";

$query .= "INSERT INTO userChioce (doWithCar) values ('$doWithCar');";

$query .= "INSERT INTO userStatus (userIdG) values ('$userIdG');";

$query .= "INSERT INTO userMain (userIdG, id_uB, id_uDInfoB, id_uChoice, id_uLoc, id_uStat) values ('$userIdG', (SELECT id_uB FROM userBasic WHERE userEmailG='$userEmailG'), (SELECT id_uDInfoB FROM dvlaInfoBasic WHERE plateNumber ='$plateNumber'), LAST_INSERT_ID(), (SELECT id_uLoc FROM userLocation WHERE postCode='$postCode'),(SELECT id_uStat FROM userStatus WHERE userIdG='$userIdG'))";

所以,第一次添加 userMore 然后 userBasic 然后 dvlaInfoMore 然后 dvlaInfoBasic 等等

我在 userBasic 列 userNameG 中设置为 UNIQUE,所以如果插入的电子邮件已经存在,它不想再进一步,但如果没有,一切都正确添加。

我想要它继续插入不同的汽车,然后使用表 userMain 中现有的电子邮件显示结果。

P.S.如果我尝试使用相同的电子邮件地址添加不同的汽车,它不起作用。基本上不要添加任何东西。

【问题讨论】:

  • @JFOG 如果您想防止重复的电子邮件地址,userEmailG 不应该是唯一的(而不是 userNameG)吗?目前,您正在防止重复名称。
  • @Guido 目前唯一的是'userEmailG','userBasic'和'userMore'没有问题,主要问题为什么它不想添加不同的汽车并使用现有的'userBasic'显示' 'userMain' 中具有不同 'dvlaInfoBasic' 的 userBasic ID'
  • @Guido 问题是我可以添加第一辆车信息但我可以添加第二辆车信息,所以第二次我想添加一些东西我不会改变任何东西,除非我使用不同的电子邮件地址并且它执行得很好.所以基本上每次我想有不同的电子邮件时都能完美执行,我该如何解决?
  • 我刚刚注意到的一件事:您的INSERT INTO userMainLAST_INSERT_ID() 插入到id_uChoice 列中。但是,在这个阶段,最后一个插入 ID 来自上一个查询 INSERT INTO userStatus,而不是 userChoice。这是你想要的吗?
  • @Guido 你有时间吗?我可以在屏幕上向您展示我的数据库等等吗?拜托,只是像个白痴一样坐了 5-7 个小时,解决不了。

标签: php mysql sql-server database insert


【解决方案1】:

正如您所怀疑的那样,INSERT 将现有密钥定义为 UNIQUE 将失败。

一种解决方法是使用REPLACE INTO 语句而不是INSERT(请参阅manual)。

【讨论】:

  • 我已经尝试过,和以前一样,一旦我插入了所有内容,即使具有不同的值,也没有添加任何额外内容。
  • 通过使用REPLACE INTO,它根本不插入任何东西。
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多