【问题标题】:Why this PHP code return me always the same echo? [duplicate]为什么这个 PHP 代码总是返回相同的回声? [复制]
【发布时间】:2019-10-29 03:31:11
【问题描述】:

此代码是注册代码的一部分。但它总是返回“昵称已经存在”。我不明白为什么。

if (isset($_POST['create'])) { 

    $nickname   = $_POST['nickname'];
    $email      = $_POST['email'];
    $password   = $_POST['password'];

    $slt1 = "SELECT nickname FROM users WHERE nickname='$nickname'";
    $slt2 = "SELECT email FROM users WHERE email='$email'";
    $stmt1 = $db->prepare($slt1);
    $stmt2 = $db->prepare($slt2);


        if($stmt1->execute([$nickname])) {

            echo 'Nickname already exist';

        } elseif ($stmt2->execute([$email])) {

            echo 'email already exist';

        } else {

            //more code here            

        }

    }   

【问题讨论】:

  • 第一个if返回true仅仅表示查询执行成功。它没有说明查询背后的业务逻辑。要检查这一点,您必须查看结果集。
  • 另外,你使用prepare语句完全错误,你假设使用占位符绑定变量。请阅读 PHP 手册examples 了解如何使用 PDO 准备语句。

标签: php if-statement pdo


【解决方案1】:

您使用执行的方式是错误的,执行返回的是布尔值 (TRUE/FALSE),而不是您的查询选择/影响的行数。

因此,您需要获取查询影响的行数并对该值执行“if”。

这样,

   $stmt1->execute();

   $number_of_rows = $stmt1->num_rows;

   if($number_of_rows == 1){

        echo 'Nickname already exist';
   }
   else{            
   //your code to insert data
   }   

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-12-18
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多