php - if语句不回避insert查询

标签 php mysql http

我正在尝试创建一个简单的 api,它可以从移动应用程序向不同的新闻添加 View 。当我使用如下网址直接在浏览器中测试时:

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();

最佳答案

如果您不想要重复项,请添加适当的唯一索引。根据您的逻辑,我认为这将是:

create unique index idx_views_3 on views(news_id, type, identifier);

然后,插入如下:

INSERT INTO views (news_id, type, identifier, reg_date)
    VALUES (?, ?, ?, CURRENT_TIMESTAMP())
    on duplicate key update news_id = values(news_id);

关于php - if语句不回避insert查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737015/

相关文章:

sql - 删除重复的 SQL 记录以允许唯一键

php - 如果项目已经存在,如何重写相同的mysql表行?

mysql - 是否可以根据其中一个查询的结果将对多个表的 MySQL 查询组合成一个查询?

java - netty.io 提供静态网页内容

iphone - 监控 iPhone 应用程序上的 Google Analytics 请求

php - 使用另一个 symfony2 项目作为供应商

php - 使用 PHP 以编程方式显示违反 MySQL 唯一约束的列名

php - 为什么 html br 换行标记在此代码中不起作用?

multithreading - HTTP GET 多线程脚本

php - 将时间/日期从 XML 文件转换为 MYSQL 格式