Фатальная ошибка: Uncaught Ошибка: Call to в member function query () on null

Я учусь php, пробую делать консультацию в базу данных используя POO, но он не вытекает. У меня появляется следующее сообщение, выполнив index.php:

Фатальная ошибка: Uncaught Ошибка: Call to в member function query () on null in C:\wamp64\www\CursoPHP\POO\consultaProductos.php:14 Stack наметил: #0 C:\wamp64\www\CursoPHP\POO\index.php(7): consultaProductos-> getProductos () #1 {main} thrown in C:\wamp64\www\CursoPHP\POO\devuelveProductos.php он-лайн 14

Я искал помощь из-за Интернета и мне не удается решить это. Код это у меня есть в 4 arcnivos php так:

config.php

   <?php


	define('DB_HOST', 'localhost');

	define('DB_USUARIO', 'root');

	define('DB_PASSWORD', '');

	define('DB_NOMBRE', 'prueba');

	define('DB_CHARSET', 'utf8');



?>

conexion.php

<?php
	
	require "config.php"; //invoca constantes que se encuentran dentro del archivo de su nombre

	class conexion{ //crear la clase para la conexión
		
		protected $conexionDB; //propiedad de la clase
		
		public function connect(){ //inicio constructor
			
			$this->conexionDB=new mysqli(DB_HOST, DB_USUARIO, DB_PASSWORD, DB_NOMBRE);
			
			if($this->conexionDB->connect_errno)
			{
				echo "Falló al conectar a MySql: " . $this->conexionDB->connect_error;
				
				return;
			
			} //Fin constructor
			
			$this->conexionDB->set_charset(DB_CHARSET); //línea que llama al código de caracteres latinos
		}
	}


?>

consultaProductos.php

<?php

	require "conexion.php"; //invoca el archivo donde se encuentra la conexión

	class devuelveProductos extends conexion{ //utiliza la herencia de una clase padre
		
		public function devuelveProd(){ // inicio constructor
			
			parent::__construct(); //llama al constructor de la clase padre
		} //fin constructor
		
		public function getProductos(){ //método de la clase
			
//El error se genera en esta línea de código
			$resultado=$this->conexionDB->query('SELECT * FROM ARTÍCULOS'); 
			
			$productos=$resultado->fetch_all(MYSQLI); // línea que almacena la consulta en un array
			
			return $productos; // devuelve la variable
		}
	}
	



?>

index.php

<?php
	
	require "devuelveProductos.php"; //invoca la(s) que se encuentran dentro del archivo php

	$productos=new devuelveProductos(); // Instancia que llama a la clase padre

	$array=$productos->getProductos(); //almacena todos los datos en la variable $array

?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
	<link rel="stylesheet" href="../Style.css" type="text/css" media="screen" />
</head>

<body>
	
	<h2>Resultado de la búsqueda con POO</h2>
	
	<div class='datagrid'><table>
	<thead><tr><th>Código Artículo</th><th>Nombre Artículo</th><th>Sección</th><th>Precio</th><th>Fecha</th><th>Importado</th><th>País Origen</th></tr></thead>
	
<?php
	
	foreach($array as $elemento){?>
		
	<tbody><tr><td>

<?php
	echo $elemento['CODIGOARTICULO'] . "</td><td>";

	echo $elemento['NOMBREARTICULO'] . "</td><td>";
		
	echo $elemento['SECCION'] . "</td><td>";
		
	echo $elemento['PRECIO'] . "</td><td>";
		
	echo $elemento['FECHA'] . "</td><td>";
		
	echo $elemento['IMPORTADO'] . "</td><td>";
		
	echo $elemento['PAISORIGEN'] . "</td></tr></table>";
		
	echo "<br>";
		
	echo "<br>";
		
	}
	
?>
		
	</tr></tbody>
	</table></div>
	<br>
	<input type="button" value="volver" name="atras" onClick="history.back()" />
	
</body>
</html>

Я благодарен за всю помощь, которую они могут облегчать мне.

2
задан 20.03.2019, 05:43
2 ответа

Так public function connect(){ в таких conexion.php как public function devuelveProd(){ в consultaProductos.php, deberГ-an, его быть public function __construct(){, чтобы предотвращать проблемы с номенклатурой строителя.

Ошибка, которая дает тебе,, - потому что ты звонишь в метод query() в null; потому что ты не инициализировал $this->conexionDB, конечно, потому что, когда сделал parent::__construct(); не habrГЎ найденный строитель класса conexion.

тебя Привыкните становиться var_dump () , чтобы подтверждать, что переменные содержат то, во что ты веришь, что deberГ-an, и что инициализировались, когда они дают тебе этот урок ошибок.

Приветствие!

0
ответ дан 02.12.2019, 05:22
  • 1
    Спасибо Микель из-за помощи. Уже я это решил – Jon TMarz 30.03.2019, 20:06

Микель, podrГ-схвати мне объяснять во всех деталях, как используется правильно строитель. Я делаю MVC с той же таблицей, и меня бросает та же ошибка. Мне не удается найти трэд, который способствует тому, чтобы оно функционировало. Это файлы.

файл связи, estГЎ в папке контролирующий с файлом connect.php

class conectar{
	
	//creamos la clase donde se almacenará el método de conexión
	public static function conexion(){
		
		try{
			
			$conexion=new PDO('mysql:host=localhost; dbname=prueba', 'root', '');
	
			$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

			$conexion->exec("SET CHARACTER SET utf8");
			
		}catch(Exception $e){
			
			die("Error: " . $e->getMessage());
			
			echo "Linea de error: " . $e->getLine();
		}
		
		return $conexion; //se devuelve la variable $conexión al terminar de revisar el método
	}
}

Консультация делается db с папки моделью с этим файлом. productosModelo.php

//creamos la clase que realizará la consulta en la base de datos
class productosModelo{ //es una buena práctica que se siga la nomenclatura tradicional en la que se nombra la clase y a la capa que le corresponde
	
	//Creación de dos variables que solo se usaran en esta clase. Una es la conexión a la base de datos y la otra es la consulta
	private $db;
	
	private $productos;
	
	public function _construct(){
		
		require_once("modelo/connect.php");
		
		//espefica la variable donde se almacenará la conexión y se llama la función donde está la conexión función::método()
		$this->db=conectar::conexion();
		
		//Creamos un array para almacenar la consulta de el la variable productos
		$this->productos=array();
		
	}
	
	public function getProductos(){ //es buena practica agregar el get en el nombre de la clase
		
		//la variable $consulta, ejecuta la sentencia SQL
		$consulta=$this->db->query("SELECT * FROM ARTÍCULOS");
		
		//este bucle recorrera el array de la sentencia SQL realizada donde
		while($filas=$consulta->fetch(PDO::FETCH_ASSOC)){
			
			$this->productos[]=$filas; //al recorrer las filas de la sentencia, se almacenan en la variable $filas
		}
		
		return $this->productos; //devuelve los productos que se encuentran dentro de la variable productos.
	}
}

В увиденной папке у меня есть файл productosView.php, где он печатает array, который хранился в productosModelo.php.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ver Productos</title>
	<link href="../../Style.css" rel="stylesheet" type="text/css" media="screen">
</head>

<body>
	<div class="datagrid">
		<table><thead><tr><th>NOMBRE ARTÍCULO</th></tr></thead>
		<tbody>
	
<?php
		foreach($matrizProductos as $registro){ //metemos el array en una tabla
			
			echo "<tr><td>" . $registro["NOMBREARTICULO"] . "</td></tr>";
		}
	
	
?>
			</tbody>
		</table>
	</div>
</body>
</html>

в папке драйвер у меня есть файл productosControlador.php

<?php

require_once("modelo/productosModelo.php"); //invocamos el productos modelo

//ejecutamos el método que se encuentra en la clase dentro del archivo productosModelo.php
$productos=new productosModelo();//se crea una variable para llamar al constructor de la clase

$matrizProductos=$productos->getProductos(); //se crea una variable para llamar al método de la clase 

require_once("vista/productosView.php"); //invocamos el productos view

?>

и все выполнено с index.php

<?php

require_once("modelo/productosModelo.php"); //invocamos el productos modelo

//ejecutamos el método que se encuentra en la clase dentro del archivo productosModelo.php
$productos=new productosModelo();//se crea una variable para llamar al constructor de la clase

$matrizProductos=$productos->getProductos(); //se crea una variable para llamar al método de la clase 

require_once("vista/productosView.php"); //invocamos el productos view

?>

, когда я выполняю index.php, показывает мне сообщение: Fatal error: Call to a member function query() on null in C:\wamp64\www\CursoPHP\MVC\modelo\productosModelo.php on line 26

я Им благодарен за помощь

0
ответ дан 02.12.2019, 05:22

Теги

Похожие вопросы