Php 如何检查表中的两行,确保它们的值在其他行中不重复

Php 如何检查表中的两行,确保它们的值在其他行中不重复,php,mysql,Php,Mysql,假设我有一个名为服务的表: 我做了一个表格来更新这个表格: <form action='' method='POST'> <div class='box box-default'> <div class='box-header with-border'> <h3 class='box-title'><span style='color:blue'><span>".$

假设我有一个名为
服务
的表:

我做了一个表格来更新这个表格:

<form action='' method='POST'>
    <div class='box box-default'>
        <div class='box-header with-border'>
            <h3 class='box-title'><span style='color:blue'><span>".$home['name_service']."</span></h3>
            <div class='box-tools pull-right'>
                <button type='button' class='btn btn-box-tool' data-widget='collapse'><i class='fa fa-minus'></i></button>
            </div>
        </div>
                                    
        <div class='box-body'>
            <div class='row'>
                <div class='col-md-6'>
                    <div class='form-group'>
                        <label for='ser'>Name of Service:</label>
                        <input name='sname' type='text' class='form-control' value='".$home['name_service']."'>
                    </div>
                    <div class='form-group'>
                        <label for='ser'>Background Color of Box:</label>
                        <input name='bgbox' type='text' class='form-control' value='".$home['bg_box']."'>
                    </div>
                    <div class='form-group'>
                        <label for='ser'>Description of Service:</label>
                        <input name='sdesc' type='text' class='form-control' value='".$home['desc_service']."'>
                    </div>
                    <div class='form-group'>
                        <label for='ser'>Link of Service:</label>
                        <input name='slink' type='text' class='form-control' value='".$home['link_service']."'>
                    </div>
                </div>
            </div>
        </div>
                                
        <p>
            <button name='update' type='submit' class='btn btn-success btn-lg'>Update</button>
            <button type='button' class='btn btn-danger btn-lg'>Delete</button>&nbsp;
            <input type='checkbox' name='showing'><label for='showing'>&nbsp; Hide from showing</label></br>
        </p><hr></hr>
    </div>
</form>
下面是我调用的
CheckSname2()
方法:

public function CheckSname2($servicename,$backgroundbox,$servicedesc,$servicelink)
{
    if(!empty($servicename)&&!empty($backgroundbox)&&!empty($servicedesc)&&!empty($servicelink))
    {
        $chk1 = $this->_db->prepare("SELECT name_service FROM homepage WHERE name_service = ?");
        $chk1->bindParam(1,$servicename);
        $chk1->execute();
        if($chk1->rowCount() == 1)
        {
            $notice['service_name'] = "Try different service name";
            return $this->notice;
        }else{
            $chk2 = $this->_db->prepare("SELECT link_service FROM homepage WHERE link_service = ?");
            $chk2->bindParam(1,$servicelink);
            $chk2->execute();
            if($chk2->rowCount() == 1)
            {
                $notice['service_link'] = "Try different page url";
                return $this->notice;
            }else{
                $this->UpdateService($servicename,$backgroundbox,$servicedesc,$servicelink);
                $notice['success_message'] = "New service was successfully added";
                return $this->notice;
            }
        }
    }
}
如您所见,基本上我希望用户插入一个在任何其他行都不重复的
name\u服务
。如果不是,那么该方法也会检查
链接服务。如果这两种方法不重复,它将调用
UpdateService()
方法

现在问题来自表单的这两个输入,我从属于用户的表中检索当前数据:

<input name='sname' type='text' class='form-control' value='".$home['name_service']."'>
<input name='slink' type='text' class='form-control' value='".$home['link_service']."'>

例如,如果当前的
name\u服务
是banana,而
link\u服务
是banana-place,并且用户将banana-place更改为其他任何内容,则不会更新该表,因为
CheckSname2()
方法也会从表中检查
name\u服务
。由于该值尚未更改,因此返回错误

现在,我希望此方法检查,如果用户键入属于其他用户的任何其他
name\u服务
link\u服务
,是否返回自定义错误消息,否则它必须更新表,即使用户更改了一个字段


注意:
UpdateService()
方法只需更新表即可正常工作,因此无需将其包括在内。

如果我理解正确,您需要检查
名称服务
链接服务
的组合是否唯一。 对此的一个简单检查是使用一个要求两者都存在的
WHERE
子句运行select查询

SELECT table_id FROM table
   WHERE name_service = "banana"
   AND link_service = "banana_link"
   LIMIT 1
如果此查询返回任何结果(
rowCount()==0
)。组合是唯一的,您可以继续更新或插入


否则,组合确实存在,您可以简单地发送消息:此组合已经存在。更改名称或链接

以便如果我是正确的,两列中只有一列必须是唯一的<代码>香蕉+香蕉链接
不同于
香蕉+梨链接
,不同于
菠萝+香蕉链接
?还有
菠萝+梨链接
也可以吗?
SELECT table_id FROM table
   WHERE name_service = "banana"
   AND link_service = "banana_link"
   LIMIT 1