2017-02-14 67 views
1

我有我的mysql查询的问题,我尝试做ON DUPLICATE KEY UPDATE,但我得到错误,我不知道为什么,也许是因为我用我的更新声明做错了。这里是我的sql代码:在我的sql查询中的语法错误(在重复密钥更新)

$q3='INSERT INTO prestashop.ps_product_supplier (product_supplier_reference,product_supplier_url) values ("%s","%s") WHERE id_product=%d ON DUPLICATE KEY UPDATE prestashop.ps_product_supplier SET product_supplier_reference= "%s", product_supplier_url= "%s" WHERE id_product = %d'; 

$sql3 = sprintf($q3, $_REQUEST['tki'],$_REQUEST['tki2'], $_REQUEST['id']); 

我知道它的不安全的方法使用$ sql3那样!但是我用它为我的个人需求

+0

$ q3 ='插入到prestashop.ps_product_supplier(product_supplier_reference,product_supplier_url)值(“%s”,“%s”)ON DUPLICATE KEY UPDATE id_product =%d'; – JYoThI

回答

0
$q3='INSERT INTO prestashop.ps_product_supplier (id_product,product_supplier_reference,product_supplier_url) values (%d,"%s","%s") ON DUPLICATE KEY UPDATE prestashop.ps_product_supplier SET product_supplier_reference= "%s", product_supplier_url= "%s" WHERE id_product=%d'; 

$sql3 = sprintf($q3, $_REQUEST['tki'],$_REQUEST['tki2'], $_REQUEST['id']); 
+0

我仍然收到语法错误,这可能会发生,因为一些product_supplier_reference/url是空值,但他们有一个ID。而且替换也给我一个语法错误。这是我的数据库imgur.com/a/2Nhn8 – Somepub

+0

运行查询,因为它是从phpmyadmin例如,并使用一些演示值,你会得到错误? @Somepub –

+0

我做了,我发现替换或输入工作,因为我有另一个sql列:id_supplier和错误是:“字段'id_supplier'没有默认值”,我想我只是需要替换相同的id_supplier由id – Somepub

0
$q3='INSERT INTO prestashop.ps_product_supplier (product_supplier_reference,product_supplier_url) values ("%s","%s") WHERE id_product=%d ON DUPLICATE KEY UPDATE prestashop.ps_product_supplier SET product_supplier_reference= "%s", product_supplier_url= "%s"'; 

$sql3 = sprintf($q3, $_REQUEST['tki'],$_REQUEST['tki2'], $_REQUEST['id'],$_REQUEST['tki'],$_REQUEST['tki2']); 
+0

对不起,先生我错误地编辑了你的答案... –

+0

谢谢你所有的答案,但我仍然得到一个语法错误,这可能会发生,因为一些product_supplier_reference/url是空值,但他们有一个ID。而且替换也给我一个语法错误。这我的数据库http://imgur.com/a/2Nhn8 – Somepub

0

在你的情况下,它会更容易使用REPLACE语句 https://dev.mysql.com/doc/refman/5.7/en/replace.html

$q3='REPLACE INTO prestashop.ps_product_supplier (id_product,product_supplier_reference,product_supplier_url) values (%d,"%s","%s")'; 
$sql3 = sprintf($q3,$_REQUEST['id'], $_REQUEST['tki'],$_REQUEST['tki2']); 

另外,在查询中的错误是使用INSERT语句中的WHERE子句 https://dev.mysql.com/doc/refman/5.7/en/insert.html

$q3='INSERT INTO prestashop.ps_product_supplier (id_product,product_supplier_reference,product_supplier_url) values (%d,"%s","%s") ON DUPLICATE KEY UPDATE product_supplier_reference= "%s", product_supplier_url= "%s"'; 
$sql3 = sprintf($q3,$_REQUEST['id'], $_REQUEST['tki'],$_REQUEST['tki2'],$_REQUEST['tki'],$_REQUEST['tki2']); 
+0

我仍然收到语法错误,这可能会发生,因为一些product_supplier_reference/url是空值,但他们有一个ID。而且替换也给我一个语法错误。这是我的数据库imgur.com/a/2Nhn8 – Somepub

+0

我在replace语句中有一个语法错误,请尝试编辑的语句(删除where子句),同时INSERT INTO语句没有WHERE子句,它会更容易下一个如果你发布你的语法错误的话。 – knetsi