PHP 连接和查询错误:致命错误:在 null 上调用成员函数 query()

Posted

技术标签:

【中文标题】PHP 连接和查询错误:致命错误:在 null 上调用成员函数 query()【英文标题】:PHP connection and query error: Fatal error: Call to a member function query() on null in 【发布时间】:2019-03-10 23:37:57 【问题描述】:

我在下面的陈述中遇到了上述错误,尝试了堆栈中其他答案的多个修复,但继续得到相同的错误:(

这是用户注册表单中 php 代码的一部分,希望将他们的信息插入表格中

if($conn->query( "INSERT INTO users (FIRST_NAME, LAST_NAME, USERNAME, PASSWORD)
VALUES ('$fname', '$lname', '$uname', '$pword')")==TRUE)
 echo 'Inserted';
 else
 echo 'Not Inserted';
 

我在 $conn 的单独文件中有其他代码

function dbConnect()
 $servername = "x";
 $database = "activity2"; 
 $username  = "root"; 
 $password = "root";
// Create connection
 $conn = new 
mysqli($servername, $username, $password, $database); 
// Check connection 
if  ($conn->connect_error)  die("Connection failed: " . $conn->connect_error); 
 //echo "Connection successful"; //make variable global to access in other 
functions global $conn; return $conn; 

【问题讨论】:

错误在于$conn的创建 我在一个单独的函数文件中有这个代码:function dbConnect() $servername = "x"; $数据库=“活动2”; $用户名=“根”; $密码=“根”; // 创建连接 $conn = new mysqli($servername, $username, $password, $database); // 检查连接 if ($conn->connect_error) die("Connection failed: " . $conn->connect_error); //echo "连接成功"; //使变量成为全局变量,以便在其他函数中访问 global $conn;返回 $conn; 那么在上面代码的文件中,我在顶部有全局$conn? 在上面之前你需要$conn=dbConnect(); 您是否随时调用 dbConnect()? 【参考方案1】:

首先要做的是创建将返回连接的类:

<?php
//filename: dbConnect.php
class dbConnect

	
		public function connect() 
			 global $conn;
				
			 $servername = "localhost";
			 $username  = "root"; 
			 $password = "";
			 $database = "test";  
			// Create connection
			 $conn = new mysqli($servername, $username, $password, $database); 
			// Check connection 
			if  ($conn->connect_error)  
				die("Connection failed: " . $conn->connect_error); 
			 //echo "Connection successful"; //make variable global to access in other 
			
			return $conn;			
		


?>

现在您可以在另一个文件中执行您的 sql 命令:

<?php
require 'dbConnect.php';

	$db = new dbConnect();
	$conn = $db->connect();

	$nome = "Anailton";
	$email = "jose@hotmail.com";
	if($conn->query( "INSERT INTO clientes (NOME, EMAIL) VALUES ('$nome', '$email')")==TRUE)
		echo 'Inserted';
	else
		echo 'Not Inserted';
	

?>

【讨论】:

我得到$db无法解析为类型的错误 当我运行它时,我收到致命错误:第 55 行的 C:\xampp\htdocs\activity3\registerHandler.php 中找不到类 'dbConnect' 可以复制答案的内容并将其保存为文件夹 C:\xampp\htdocs\activity3 内的文件 dbConnect.php 有了这个我相信你的 registerHandler.php 会找到dbConnect 类。在 registerHandler.php 中(第 55 行之前),使用行 require 'dbConnect.php'; 您好,Junior,很抱歉,但很奇怪。它适用于我的 registerHandler 文件,但在我的 loginHandler 文件中,当我需要 dbConnect.php 时,它给我一个错误,我“无法重新声明类 dbConnect” 可以使用 require_once 代替 require。在需要建立数据库连接的每个 PHP 文件中使用它。

以上是关于PHP 连接和查询错误:致命错误:在 null 上调用成员函数 query()的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:未捕获的错误:在 null 上调用成员函数 select()

致命错误:未捕获错误:在null上调用成员函数select()

PHP“致命错误:未捕获错误:调用成员函数prepare()为null”

使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误

通过findOneBy方法获取的Doctrine实体的行为与通常类似,但会触发致命错误

Joomla、Falang 集成组件...致命错误:在 null 上调用成员函数 getTable()