mysqli — Uncaught Ошибка: вызов функции-члена fetch_assoc () для целого числа в C: \ xampp \ htdocs \ pro \ ProController \ DatabaseConfig.class.php: 47

Я новичок в ООП в PHP и MYSQL. Я искал решения везде, но не смог найти именно то, что искал. Я сталкиваюсь с

Неустранимая ошибка: вызов функции-члена fetch_assoc () на целое число .

Как вы можете видеть это говорит о целом числе. Пожалуйста, дайте мне знать, где я делаю ошибку.

  • Функция входа в UserController работает хорошо.
  • Я создал отдельную функцию для fetch ().

DatabaseConfig.class.php

  <?php

/**  * Connects to Database  */
class DatabaseConnect {
protected $db_host = 'localhost';
protected $db_name = 'procusa';
protected $db_user = 'root';
protected $db_pass = '';
private $conn;


public function __construct()
{
$this->conn = new mysqli($this-
>db_host,$this->db_user,$this->db_pass,$this->db_name);

if($this->conn->connect_error) {
header("Location: ../ErrorHandlers/DBError");
}
return true;
}

public function query($query)
{
$status = $this->conn->query($query);
if(!$status) return $this->conn->error;
else return 1;
}


public function fetch($result)

{
$row = $result->fetch_assoc();
if(!$fetch) echo "Could Not Fetch";
else return $row;
}

}


$con = new DatabaseConnect();

?>

UserController.class.php

<?php session_start(); ?>
<?php

/**
* Class Template For Users
*/

class ProcusaUsers extends DatabaseConnect
{


function RegisterUser($password,$email,$phone,$username)
{
$reg_query = "INSERT INTO `registeredusers` (`id`, `email`, `password`,
`username`, `regd_time`)
VALUES (NULL, '".$email."', '".$password."', '".$username."', NOW());";

if( $result = DatabaseConnect::query($reg_query) ) {
$_SESSION['line'] = 1; //1 for ON Line
$_SESSION['email'] = $email;
header("location: index.php");
}
else
echo $result;

}

function AddMore($name) {}

function Login($email,$password) {

$login = "SELECT * FROM `registeredusers` WHERE email='$email' AND password = '$password'";
if($status = DatabaseConnect::query($login) ) {
$_SESSION['line'] = 1;
$r = DatabaseConnect::fetch($status);
return $r;

} return false;
}
}

$user = new ProcusaUsers();
?>

login.php

  <?php

if (isset($_POST['signin'])) {
if($result = $user->Login($_POST['email'] , $_POST['password'])) {
$row = $con->fetch_assoc($result);
print_r($row);
}
}

?>

0

Решение

DatabaseConnect::query в вашем коде возвращается 1, но он должен вернуть mysqli_result объект.

На линии if(!$status) return $this->conn->error; это должно быть идентичное сравнение с false значение. Потому что, например, если запрос SELECT COUNT(*) FROM ... вернусь 0, ваш код вернет ошибку (см. преобразование в логическое), но на самом деле это будет числовой результат. Поэтому измените эту строку на:

if ($status === false) {
return $this->conn->error;
}

Вы должны переименовать fetch метод для fetchOneRowпотому что это имя более точно отражает то, что делает метод.

Пожалуйста, следуйте правилам именования (например, Соглашение об именах Zend) и начните имена методов со строчной буквы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]