Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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_Mysql - Fatal编程技术网

Php 检测重复值

Php 检测重复值,php,mysql,Php,Mysql,我有一张桌子,它的结构是 companies - table id name url logo 从这个表中,我想在插入之前检查名称是否已经存在,url是否存在,徽标是否存在。名称、url和徽标应该是唯一的。我可以检查一下 SELECT * FROM companies WHERE name='$name' OR url='$url' OR logo='$logo' 并计算记录的数量。从上面的查询中,我是否可以检测出哪个字段是重复的?因此,我可以在视图中显示错误时将该字段显示为重复字段 谢谢是

我有一张桌子,它的结构是

companies - table
id
name
url
logo
从这个表中,我想在插入之前检查名称是否已经存在,url是否存在,徽标是否存在。名称、url和徽标应该是唯一的。我可以检查一下

SELECT * FROM companies WHERE name='$name' OR url='$url' OR logo='$logo'
并计算记录的数量。从上面的查询中,我是否可以检测出哪个字段是重复的?因此,我可以在视图中显示错误时将该字段显示为重复字段


谢谢

是的,你可以。。因为您必须将“id”作为表的主键

您可以使用
徽标添加唯一键,然后索引
名称
url
logo
唯一。

试试这个

SELECT `id` FROM companies WHERE name='$name' AND url='$url' AND logo='$logo'

如果遇到任何此类值,则显示复制错误。

这是您的select查询

SELECT name,url,logo FROM companies WHERE name='$name' OR url='$url' OR logo='$logo';
然后循环结果

$num_of_records=0;
while($row = mysqli_fetch_array($result))
{

if($name==$row['name'])
{
  echo  . " name -> " . $row['name'] ." duplicated ";
  echo "<br>";
}
else if($url==$row['url']) 
{
  echo  . " url -> " . $row['url'] ." duplicated ";
  echo "<br>";
}
else if($logo==$row['logo'])
{
  echo  . " logo -> " . $row['logo'] ." duplicated ";
  echo "<br>";
}
 $num_of_records++;
}
$num\u of\u记录=0;
while($row=mysqli\u fetch\u数组($result))
{
如果($name==$row['name'])
{
echo.“名称->”$row['name'].“重复”;
回声“
”; } else if($url==$row['url'])) { echo.“url->.”$row['url'].“重复”; 回声“
”; } else if($logo==$row['logo'])) { echo.“logo->.”$row['logo'].“重复”; 回声“
”; } $num_of_记录++; }

echo“记录数->”$num_of_记录

您可以创建一个唯一的密钥,该密钥将导致插入失败-这避免了需要两个查询:

ALTER TABLE `companies` ADD UNIQUE (
 `url`, 
 `name`,
 `logo` 
);

旁注:不要
选择*
并计算返回的行数-而是使用
选择计数(*)
。@Stobor另一方面,实际计算返回的行数正是OP需要的,因为他们还可以检查过程中的列值,并查看哪些是重复的。@lc。良好的调用反射在这种情况下最多返回3行(由于唯一性约束),并且可以使用数据,因此返回所有内容不会造成重大损失。。。