Я новичок в ООП в PHP и MYSQL. Я искал решения везде, но не смог найти именно то, что искал. Я сталкиваюсь с
Неустранимая ошибка: вызов функции-члена fetch_assoc () на целое число .
Как вы можете видеть это говорит о целом числе. Пожалуйста, дайте мне знать, где я делаю ошибку.
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);
}
}
?>
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) и начните имена методов со строчной буквы.
Других решений пока нет …