Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 请帮我选择pdo MySQL_Php_Mysql - Fatal编程技术网

Php 请帮我选择pdo MySQL

Php 请帮我选择pdo MySQL,php,mysql,Php,Mysql,我试图找出我做错了什么-我无法理解或找到一些关于它的信息 简言之,表中有3行 id login mail ip 1 me me@mail.ru 127.0.0.1 2 me2 me2@mail.ru 4234234 3 me3 me3@mail.ru 4234234 当我执行一个验证请求时,这个数据是否已经存在,但它会从最后处理它 (如何做相反的事情?) 例如,“post”请求:登录(me3)、邮件(me2@mail.ru),ip(127.

我试图找出我做错了什么-我无法理解或找到一些关于它的信息

简言之,表中有3行

  id login mail        ip 
   1 me    me@mail.ru  127.0.0.1
   2 me2   me2@mail.ru 4234234
   3 me3   me3@mail.ru 4234234
当我执行一个验证请求时,这个数据是否已经存在,但它会从最后处理它 (如何做相反的事情?)

例如,“post”请求:登录(me3)、邮件(me2@mail.ru),ip(127.0.0.1) 然后他会给我看-从最后,就是ip!我更改了IP,他通过邮件给我看,但不是通过登录

我如何解决这个问题?或者我做错了什么(第三行登录-第二行是邮件,第一行是IP),如何做到一切都不是从IP开始的(也就是说,不是从最后开始的)

当然,我有另一种选择——但我想用一种简单的方式来做

        $sqlCheckLogin = $pdo->prepare("SELECT user_login FROM ".DB_PREFIX."users WHERE user_login=:login");
        $sqlCheckLogin->execute(['login' => $login]);
        if ($sqlCheckLogin->fetchColumn()) {
            $message = 'User with this login is already registered! Enter another login.';
        }
        else 
        {
            $sqlCheckEmail = $pdo->prepare("SELECT user_email FROM ".DB_PREFIX."users WHERE user_email=:email");
            $sqlCheckEmail->execute(['email' => $email]);
            if ($sqlCheckEmail->fetchColumn()) {
                $message = 'User with this e-mail is already registered!';
            }
            else 
            {
                $sqlCheckIp = $pdo->prepare("SELECT user_ip FROM ".DB_PREFIX."users WHERE user_ip=:ip");
                $sqlCheckIp->execute(['ip' => $ip]);
                if ($sqlCheckIp->fetchColumn()) {
                    $message = 'You have already registered on the site, re-registration is prohibited and punishable by the rules of the site!';
                }
我在找例子,但我没有找到相关信息,所以我想这里有人可以告诉我该往哪个方向走。如何将这3个请求转换为1个


结果,谢谢大家! 最好的选择是分别检查登录名和电子邮件,现在我明白了我的愚蠢,也明白了我这么长时间都找不到类似的东西


当然,我可以一次检查所有内容,并显示某些内容已经存在的信息,但无法确定其顺序。通过一个独立的生存测试,我们确切地知道我们拥有什么,确切地知道要显示什么信息。

这不是一个答案,只是一个大评论

我还是不知道你的目标是什么。但我觉得你想检查一下独特的:登录,电子邮件和ip

您可以为此进行非常直接的实现

正如您在fiddle中看到的,MySql将返回正确的错误消息,您可以将其用于输出

再次尝试猜测您到底在寻找什么,可能您不需要
elseif
,而只需要一系列
,如果您喜欢的顺序是:

  if (empty($row)) {
        echo "All is well!";
  } else {
      if ($row['ip']==$ip) {
        $message .= "You have already registered - only one registration is allowed. \n";
      };
      if ($row['login']==$login) {
        $message .= "Sorry, username is already taken! \n";
      };
      if ($row['email']==$email) {
        $message .= "Sorry, the email id is already taken! \n";
      };

      echo $message;
  }

你怎么知道一个IP就是一个人?如果他们使用VPN,与其他人住在宿舍,与其他人共享网络,该怎么办。。。?如果我的IP是动态的,并且我得到了一个新的IP,其中有人已经注册了怎么办?你试图简单地做到这一点,但这不是一个简单的过程。@RaymondNijland或我的网卡坏了,我买了一个新的@Ааааааааааааааа107(如何做相反的事?)我完全误解了这个短语。我无法将它翻译成任何意义。这就是为什么我标记“不清楚你在问什么”非常感谢!是的,我只想检查唯一性并显示一个错误,即某些内容已经存在。除了一些ISP使用DHCP来分配IP,所以如果OP使用
login=:login或email=:email或IP=:IP
,并且我合法登录时使用的IP已经被其他合法登录的人使用,但我现在已被分配ted另一个人以前拥有的ip地址使用此选项,resultsetOr中将始终有多个结果OP将获得假阳性,或者是假阴性,无论如何,结果将是假的/wrong@RiggsFolly我认为OP目前只是忽略了现实世界。他不是在寻求真正的解决方案,他想实现som如果OP意识到这一点的话,也许有一天他会回来,那时来自同一办公室/城市/地点(IP)的人很少会注册失败。
ALTER TABLE users ADD UNIQUE unique_login(login);
ALTER TABLE users ADD UNIQUE unique_ip(ip);
ALTER TABLE users ADD UNIQUE unique_email(email);
  if (empty($row)) {
        echo "All is well!";
  } else {
      if ($row['ip']==$ip) {
        $message .= "You have already registered - only one registration is allowed. \n";
      };
      if ($row['login']==$login) {
        $message .= "Sorry, username is already taken! \n";
      };
      if ($row['email']==$email) {
        $message .= "Sorry, the email id is already taken! \n";
      };

      echo $message;
  }