Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在插入数据库之前检查重复项?_Php_Sql_Database_Favorites - Fatal编程技术网

Php 如何在插入数据库之前检查重复项?

Php 如何在插入数据库之前检查重复项?,php,sql,database,favorites,Php,Sql,Database,Favorites,所以我做了一个功能,可以将照片添加到收藏夹中,我该如何做才能不继续添加相同的图像 我的代码: function addToFavorites($fileName) { global $conn; $email = $_SESSION['email']; $imageId = $_GET["id"]; $sql = "insert into favorites set UserEmail='".mysqli_real_escape_string($conn, $e

所以我做了一个功能,可以将照片添加到收藏夹中,我该如何做才能不继续添加相同的图像

我的代码:

function addToFavorites($fileName)
{
    global $conn;
    $email = $_SESSION['email'];
    $imageId = $_GET["id"];

    $sql = "insert into favorites set UserEmail='".mysqli_real_escape_string($conn, $email)."', ImageID=".$imageId;
    $result = mysqli_query($conn, $sql);

任何帮助都很好,谢谢

您让数据库来完成这项工作!只需在表上定义唯一的约束或索引:

alter table favorites add constraint unq_favorites_useremail_imageid
    unique (useremail, imageid);
有了这个约束,如果您试图插入一个副本,数据库将返回一个错误

如果要避免此错误,可以在重复密钥更新时使用

insert into favorites (UserEmail, ImageId)
    values (?, ?)
    on duplicate key update ImageId = values(ImageId);
关于这一点,请注意:

  • 是一个参数占位符。学习使用参数,而不是在查询字符串中填充值
  • 这不使用
    设置
    。这是一个MySQL扩展。在这种情况下没有优势;您还可以使用标准语法
  • 重复键上的
    是一个无操作,但它可以防止代码在出现重复时返回错误

如果您想避免Gordon Linof所说的执行查询错误:


SELECT FROM favorites WHERE UserEmail=”.mysqli\u real\u escape\u string($conn,$email)。”和ImageID=“.ImageID
感谢这项工作,我只是将值设置为
values=(“”,“”);
这样它就不会显示任何内容。还有什么方法可以用我的php脚本上的代码来实现这一点吗?