我有一个程序可以执行数据库的插入和更新,我从API获取数据。 这是我得到的样本数据:
$uname = $get['userName'];
$oname = $get['offerName'];
$visitdata= $get['visits'];
$convdata = $get['conversion'];
我将此数据保存到数据库sql。 (成功)这是一个样本:
$sql = "INSERT INTO data_tester(username_data, name_offer_data, visit_data, conversion_data) VALUES('$uname','$oname', '$visitdata', '$convdata')";
数据库表中的示例数据
id | username_data | name_offer_data | visit_data | conversion_data 1 | MOJOJO | XXX AU | 177 | 13 2 | MOJOJO | XX US | 23 | 4
现在,我想保存数据$uname, $oname, $visitdata, $convdata
,如果不存在,请更新$visitdata, $convdata
$uname, $oname
如果EXIST
如何使用简单查询运行代码。 请举个例子。 谢谢。
答案 0 :(得分:1)
您正在寻找的功能称为UPSERT,它是SQL-2008 Standard的一部分。然而,并非所有DBMS都实现它,有些实现它不同。
例如在MySQL上你可以使用:
INSERT ... ON DUPLICATE KEY UPDATE
语法(link to docs) 或
REPLACE INTO
语法(link to docs)。
这些方法要求您拥有一个合适的PRIMARY KEY :( username_data name_offer_data)。
如果您使用ActiveRecord(或类似)类,某些PHP框架也支持此功能。在Laravel中,它被称为updateOrCreate,在Yii中被称为save()。因此,如果您正在使用框架,请尝试检查其文档。
如果您既不使用框架也不使用现代DBMS,则必须自己实施该方法。运行SELECT count(*) from data_tester WHERE username_data = ? AND name_offer_data = ?
,检查它是否返回任何行并调用适当的UPDATE / INSERT sql
答案 1 :(得分:0)
很简单,试试这个:
if(isset($get['userName'])){
$sql = "SELECT * FROM data_transfer WHERE userName = ".$userName.";";
$result = connection()->query($sql);
$rs = mysqli_fetch_array($result);
connection()->close();
//if is not void, means that this username exists
if ($rs != ''){
mysqli_free_result($result);
//InsertData
}
else{
mysqli_free_result($result);
//UpdateData
}
* chech你必须在where子句上使用你的PrimaryKey,以确保只有一个。如果你使用了一个ID并且你没有通过$ _GET获得它,那么你必须修改一些内容以确保不重复的数据。例如,检查userName不能复制或类似的东西
答案 2 :(得分:0)
您只需使用替换为命令,而不是插入命令。
$sql = "REPLACE INTO data_tester(username_data, name_offer_data, visit_data, conversion_data) VALUES('$uname','$oname', '$visitdata', '$convdata')";
这是一个很好用的功能。我多次使用它。
答案 3 :(得分:0)
请确保列username_data
上有唯一键,如果是这样,Mysql的ON DUPLICATE KEY UPDATE适用于这种情况,SQL语句就是这样:
$sql = "INSERT INTO data_tester(username_data, name_offer_data, visit_data,
conversion_data) VALUES('$uname','$oname', '$visitdata', '$convdata')
ON DUPLICATE KEY UPDATE username_data = '$uname', name_offer_data =
'$oname', visit_data = '$visitdata', conversion_data = '$convdata'"