【问题标题】:Uncaught Error: Call to a member function query() on null未捕获的错误:在 null 上调用成员函数 query()
【发布时间】:2017-09-28 20:33:34
【问题描述】:

我在下面的代码中被困了几个小时。我不知道如何解决这个错误。

注意:未定义变量:第 19 行 D:\xampp\htdocs\recon\register.php 中的 mysqli

致命错误:未捕获的错误:在 D:\xampp\htdocs\recon\register.php:19 中调用成员函数 query() 堆栈跟踪:#0 {main} 在 D:\xampp\htdocs 中抛出\recon\register.php 第 19 行

<?php

$conn = new mysqli('localhost', 'root', '', 'user');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$uname = $_POST['uname'];
$psw = $_POST['psw'];
$options = [
'cost' => 12,];
$hashedpassword= password_hash($psw, PASSWORD_BCRYPT, $options);

$result = $mysqli->query("SELECT username FROM registration WHERE username = '$uname'"); 
$row_count = $result->num_rows; 
if($row_count == 1) { 
    echo 'User already exists, try another one.'; } 
else {

    $query = "INSERT INTO user (username, password) VALUES(?, ?)";
    $statement = $mysqli->prepare($query);

    $statement->bind_param('ss', $uname, $hashedpassword);

    if($statement->execute())
    {
         print 'Success! Last inserted record : ' .$statement->insert_id .'<br />'; 
    }
    else
    {
         die('Error : ('. $mysqli->errno .') '. $mysqli->error);
    }
    $statement->close();

}

?>

【问题讨论】:

标签: php mysql prepared-statement sql-insert


【解决方案1】:

您正在声明 mysqli 的实例,称为 $conn。这代表您与 DB 的连接。您应该在变量$conn 上调用方法,而不是在(未定义的)变量$mysqli 上调用方法。所以即。你的第 19 行应该是:

$result = $conn->query("SELECT username FROM registration WHERE username = '$uname'")

此外,为了防止查询/网页上的 SQL 注入,您应该使用 prepared statements EVERYWHERE(包括 SELECT)。

【讨论】:

  • 谢谢你,这帮助我找出了哪里出错了。
【解决方案2】:

如果你拼错构造函数,你会得到这个错误。 比如php中构造函数的正确语法,

__construct(){}

你可能写错了,

__contruct(){}

同样,检查其他功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2021-11-28
    • 2020-10-04
    相关资源
    最近更新 更多