大家好!
我正在使用php和mysql进行应用程序。基本上,最初,我使用html表单将新数据条目插入到数据库中,其中存储#是我的主键。现在我无法更新现有的商店#(作为我的主键),并收到一条消息“商店967的重复条目(示例)”。 如果存在entery,我想更新“store”表。这是我在下面发布的代码,但是我收到了另一条错误消息
错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在“['967']附近使用正确的语法,address
= ['500 kipling avenue 1'],dsm_name
= ['n / a '],phone
= ['416-967-'第1行
我不确定我是否在正确的位置使用if条件。
**$sql = "INSERT INTO `stores`(`store_num`, `address`, `dsm_name`, `phone`, `router_type`, `high_speed_pri`, `dsl_log`, `dsl_pass`, `secondary_conn`, `sec_dsl`, `sec_pass`) VALUES ('$store' , '$address', '$dsm', '$phone', '$router', '$highspeedpr', '$dsllog', '$dslpas', '$secondary_conn' , '$secdsl' , '$sec_pass')";
$mysqli_query = "SELECT * from 'stores' WHERE $store = 'store_num'";
if ($mysqli_query == TRUE){
$sql = "UPDATE `stores` SET `store_num`=['$store'],`address`=['$address'],`dsm_name`=['$dsm'],`phone`=['$phone'],`router_type`=['$router'],`high_speed_pri`=['$highspeedpr'],`dsl_log`=['$dsllog'],`dsl_pass`=['$dslpas'],`secondary_conn`=['$secondary_conn'],`sec_dsl`=['$secdsl'],`sec_pass`=['$sec_pass'] WHERE 1";
}
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>**
答案 0 :(得分:2)
由于您的更新语句包含与插入相同的所有字段,因此您只需使用 REPLACE 语句即可。如链接文档中所述:
REPLACE的工作原理与INSERT完全相同,只是如果在一个旧行中 table与PRIMARY KEY或UNIQUE的新行具有相同的值 index,在插入新行之前删除旧行。看到 第13.2.5节“INSERT语法”。
因此,将代码更改为以下代码应该有效:
$sql = "REPLACE INTO `stores`(`store_num`, `address`, `dsm_name`, `phone`, `router_type`, `high_speed_pri`, `dsl_log`, `dsl_pass`, `secondary_conn`, `sec_dsl`, `sec_pass`) VALUES ('$store' , '$address', '$dsm', '$phone', '$router', '$highspeedpr', '$dsllog', '$dslpas', '$secondary_conn' , '$secdsl' , '$sec_pass')";
您的问题在于更新语句中的语法。什么是store_num
,是数字还是字符串?
您应该将语法更改为不包含实际mysql查询中的方括号。
如果$ Store为Number:
=['$store'],
至=$store
如果$ Store为文字:
=['$store'],
至='$store'
更好的方法是使用准备好的语句,这些语句也是安全的,可以避免SQL注入攻击。
答案 1 :(得分:2)
您可以使用on duplicate key update
通过单个查询执行此逻辑。首先,您必须将store_num
定义为唯一键,如果它不是唯一键或主键:
CREATE UNIQUE INDEX idx_stored_storenum on stores(store_num);
然后使用此insert
:
INSERT INTO `stores`(`store_num`, `address`, `dsm_name`, `phone`, `router_type`, `high_speed_pri`,
`dsl_log`, `dsl_pass`, `secondary_conn`, `sec_dsl`, `sec_pass`
)
VALUES ('$store' , '$address', '$dsm', '$phone', '$router', '$highspeedpr',
'$dsllog', '$dslpas', '$secondary_conn' , '$secdsl' , '$sec_pass')
ON DUPLICATE KEY UPDATE address = values (address),
dsm_name = values(dsm_name),
. . .
sec_pass = values(sec_pass);
你的特殊问题是方括号,MySQL无法识别。