Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Penguin en 15 Abril 2018, 15:11 pm



Título: [Resuelto] Problema con prepare() MySQLi
Publicado por: Penguin en 15 Abril 2018, 15:11 pm
Hola, hace mucho tiempo no programaba en php y me encontré con que la función mysql() fue declarada obsoleta, por lo cual me veo forzado a tratar de aprender el funcionamiento de mysqli().

Tengo el siguiente código en funciones.php;

Código
  1. <?php
  2. global $conexion;
  3.    function conectarBD() {
  4.   $conexion = new mysqli('localhost', 'root', '', 'Zeta');
  5.  
  6.   if($conexion->connect_errno) {
  7.      die('Error: '. $conexion->connect_errno);
  8. }
  9.  return $conexion;
  10. }
  11. ?>

Y por otra parte, tengo login.php:

Código
  1. <?php
  2. require('funciones.php');
  3. $usuario = $_POST['usuario']; // Dato obtenido desde un formulario
  4.  
  5. conectarBD();
  6.   $sql_datos = "SELECT * FROM usuarios WHERE usuario = ?";
  7.   $sql_final = $conexion->prepare($sql_datos);
  8.    if($sql_final) {
  9. $sql_final->bind_param("s", $usuario);
  10. $sql_final->excecute();
  11. $sql_final->store_result();
  12. }
  13.  
  14. ?>

Me devuelve el siguiente error:

Citar
Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\login.php:11 Stack trace: #0 {main} thrown in C:\xampp\htdocs\login.php on line 11

Marca error en el prepare() de la consulta (ignoren "linea 11", ya que lo recorté para que sea más breve) como si fuera que no logra relacionar la preparación de la consulta, con la variable $conexion, aunque haya sido declarada globalmente... No comprendo cual es el error, si alguien puede ayudarme le agradecería.


Título: Re: Problema con prepare() MySQLi
Publicado por: Penguin en 22 Abril 2018, 19:27 pm
Ya lo pude resolver. Por si alguien tiene este problema a futuro, la respuesta era que:

Código:
global $conexion

tenía que ir dentro de la función, ya que al usar require y no include, solo se llamaba a la misma y no al archivo funciones.php completo.

Saludos.