【发布时间】:2015-04-19 23:15:39
【问题描述】:
我正在尝试创建一个简单的 api,假设它可以为来自移动应用程序的不同新闻添加视图。当我使用如下网址直接在浏览器中测试时:
http://url/addview.php?type=ios&identifier=35605C24-8EA6-4342-Bdfd-245432&newsid=147
如果 news_id、type 和 identifier 已经存在,它可以在这里工作并添加重复项。但是,当我在我的 ios 应用程序中通过异步 http 请求运行此 url 时,它似乎总是添加一条新记录,即使它已经存在于 d
$con = new mysqli('host','user','pass','db');
$type = $_GET['type'];
$identifier = $_GET['identifier'];
$news = $_GET['newsid'];
$check = $con->prepare("SELECT * FROM views WHERE views.news_id =? AND views.type =? AND views.identifier=?");
$check->bind_param("iss", $news, $type, $identifier);
$check->execute();
$check->store_result();
$check->fetch();
if ($check->num_rows == 0) {
$con->next_result();
$check->close();
$add_view = $con->prepare("INSERT INTO views (views.news_id, views.type, views.identifier, views.reg_date) VALUES (?, ?, ?, CURRENT_TIMESTAMP())");
$add_view->bind_param("iss", $news, $type, $identifier);
$add_view->execute();
$add_view->close();
$con->next_result();
}
$con->close();
【问题讨论】:
-
为什么不在你的表上添加一个
UNIQUE KEY(views.news_id, views.type, views.identifier)而不是2个查询,然后只做一个查询-INSERT INGORE ...? -
你能回答一下吗?我不确定我是否理解?
-
unique约束将导致数据库拒绝任何与约束冲突的新行。 -
尝试删除
$check->fetch();行