【问题标题】:Debug mySQLi prepared statement -> email not found调试 mySQLi 准备好的语句 -> 找不到电子邮件
【发布时间】:2013-12-25 18:42:44
【问题描述】:

我尝试实现一个注册表单并尝试通过 php 和 jQuery 检查用户是否已经使用某个电子邮件注册。

这是我的一段代码:

if(endsWith($email, 'domain.tld'))
{
    $result = $database->prepare("SELECT id FROM users WHERE email LIKE ?");
    $result->bind_param('s', $email);
    //echo $email;
    $result->execute();
    //echo $result->execute();
    //echo $result->num_rows;
    //exit();

    if($result->num_rows == 0)
    {
        echo'ok';
    }
    else {
        echo 'duplicate';
    }
    $result->close();
}
else {
    echo 'validation failed';
}

我使用了注释的 echos 和 exit() 来调试我的代码。问题是数据库保存了用户 user@domain.tld 并且脚本在 echo "user@domain.tld10" 中显示了我。因此该语句执行成功,但没有返回任何行。如果我执行语句

SELECT id FROM users WHERE email LIKE "user@domain.tld"

我得到了返回的 id(在本例中为 11)。

我的问题是,我怎样才能更好地调试这个 php 脚本,最大的问题是,为什么我的 scipt 不能正常工作?

提前非常感谢您!

【问题讨论】:

  • 对不起,错过了 $result->execute();刚刚添加了

标签: php mysql email mysqli


【解决方案1】:

在 num_rows 之前使用

  $result->store_result();

mysqli_stmt_num_rows()的使用取决于你有没有使用 mysqli_stmt_store_result() 缓冲整个结果集在 语句句柄。

Docs

【讨论】:

  • 有趣的是它在另一个脚本中工作:/无论如何,谢谢!
猜你喜欢
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2011-03-07
  • 2014-06-11
  • 2011-06-20
  • 1970-01-01
相关资源
最近更新 更多