当我验证表中是否已存在用户名和电子邮件时,PHP出错

时间:2017-08-25 01:29:25

标签: php mysql validation

我正在尝试验证用户表中的用户名和电子邮件。验证工作如果表中存在用户名或电子邮件,则不会存储,但在提交后我只在浏览器中看到白屏,当我检查服务器日志时出现此错误。

PHP致命错误:未捕获错误:调用未定义的方法

  

mysqli :: mysqli_num_rows()in   /var/www/html/NutriCare/signup.php:86\nStack trace:\ n#0 {main} \ n   在第86行的/var/www/html/NutriCare/signup.php中引发

我的代码在数据库连接中有什么问题吗?

以下是 config.php

中的代码
<?php
$servername = "localhost";
$username = "root";
$password = "";
$db = "db";

$conn = new mysqli($servername, $username, $password, $db);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?> 

以下是我在 signup.php 中验证用户名和电子邮件的代码,其中包含 config.php 文件

<?php
require 'config.php';
$query = "SELECT username FROM users WHERE username='$username'";
$result = mysqli_query($conn, $query);
$query2 = "SELECT email FROM users WHERE email='$email'";
$result2 = mysqli_query($conn, $query2);

if ($conn->mysqli_num_rows($result) != 0) {
    ?>
    <script>
        sweetAlert("Error!", "Username already exist!", "error");
            return false;
    </script>
    <?php
}

if ($conn->mysqli_num_rows($result2) != 0) {
    ?>
    <script>
        sweetAlert("Error!", "Email address already exist!", "error");
            return false;
    </script>
    <?php
}
?>

但是当我删除此代码以验证电子邮件和用户名时,存储数据的处理工作没有错误。 我收录了$ conn-&gt; close();代码在php文件的最后我刚刚发布了我遇到错误时输入的代码。 寻求帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

检查行是否存在的两个查询都不正确。

if ($conn->mysqli_num_rows($result) != 0)
    ^^^^^^^

if ($conn->mysqli_num_rows($result2) != 0)
    ^^^^^^^

您没有为结果集传递连接变量(来自查询),您只能使用查询(成功)结果中的变量。

将您的代码修改为:

if (mysqli_num_rows($result) != 0)
                 // ^^^^^^^ $result is all you need here

if (mysqli_num_rows($result2) != 0)
                 // ^^^^^^^^ $result2 is all you need here

注意:如果!=逻辑运算符不起作用,请改用> 0!= 0可能会产生误报。

您也可以使用逻辑ORAND运算符在一个查询中执行此操作。但是,这可能超出了问题的范围。

请记住,您的代码对SQL注入是开放的。使用准备好的声明:

您还可以查看我的一个答案,其中包含一些预备语句方法:

检查PHP和MySQL /查询端的错误。

参考文献:

参考PHP mysqli_num_rows()

(声明)

我提供了这个答案,以支持PHP / MySQL部分,并且无法为您使用的SweetAlert脚本提供支持。