【问题标题】:PHP connection and query error: Fatal error: Call to a member function query() on null inPHP 连接和查询错误:致命错误:在 null 上调用成员函数 query()
【发布时间】: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()?

标签: php sql mysqli


【解决方案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 文件中使用它。
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多