[英]Uncaught Error: Call to a member function fetch_assoc() on integer in C:\xampp\htdocs\pro\ProController\DatabaseConfig.class.php:47
I am new to OOP in PHP and MYSQL. 我是PHP和MYSQL中OOP的新手。 I looked for the solutions everywhere but could not find exactly what I am looking for.
我到处都在寻找解决方案,但找不到确切的解决方案。 I am facing with the
我正面临着
Fatal Error: Call to a member function fetch_assoc() on integer .
致命错误: 在integer上调用成员函数fetch_assoc()。
As you can see it says an integer. 如您所见,它表示一个整数。 Please let me know where am I making a mistake.
请让我知道我在哪里犯错。
DatabaseConfig.class.php 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 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 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
in your code returns 1
, but it should return a mysqli_result
object. 您代码中的
DatabaseConnect::query
返回1
,但是它应该返回一个mysqli_result
对象。
At line if(!$status) return $this->conn->error;
在
if(!$status) return $this->conn->error;
it must be identical comparsion with false
value. 它必须是具有
false
值的相同比较。 Because, for example, if query SELECT COUNT(*) FROM ...
will return 0
, your code will return an error (see converting to boolean ), but actually it will be a numeric result. 因为例如,如果查询
SELECT COUNT(*) FROM ...
将返回0
,则您的代码将返回错误(请参阅转换为boolean ),但实际上它将是数字结果。 So change this line to: 因此,将这一行更改为:
if ($status === false) {
return $this->conn->error;
}
You should to rename fetch
method to fetchOneRow
, because this name more accurately reflects what the method does. 您应该将
fetch
方法重命名为fetchOneRow
,因为此名称更准确地反映了该方法的作用。
Please follow naming conventions (for ex. Zend naming convention ) and start your methods names with lowercase letter. 请遵循命名约定(例如Zend命名约定 ),并以小写字母开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.