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脚本上的代码来实现这一点吗?