2012-05-31 24 views
12

Estoy intentando crear algunas funciones para un sitio web mío y algunas consisten en obteniendo datos de la base de datos mysql. Cuando pruebo el código fuera de la función parece que funciona correctamente. Así que aquí está, la primera página:mysqli/mysql query inside function no funciona

require('db.php'); 
require('functions.php'); 

$email = '[email protected]'; 

if (user_exists($email) == true){ 
echo "Good news, this exists"; 
} 

Ahora db.php:

$db = new MySQLi("localhost","test","test","test"); 
if ($db->connect_errno){ 
    echo "$db->connect_errno"; 
} 

y el archivo functions.php:

function sanitize ($data){ 
    $db->mysqli_real_escape_string($data); 
} 
function user_exists($usermail){ 
    $usermail = sanitize($usermail); 
    $query = $db->query("SELECT COUNT(userId) FROM users WHERE userEmail= '$usermail' "); 
    $check = $query->num_rows; 
    return ($check == 1) ? true : false; 
} 

Y el error que estoy consiguiendo cuando acceder al primer archivo es:

Notice: Undefined variable: db in C:\xampp\htdocs\auctior\inc\functions.php on line 6 

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\auctior\inc\functions.php on line 6 

SO I He requerido/incluido el db.php donde $ db es el mysqli connect. Y dentro del mismo archivo (primer archivo) que llamo las funciones localizadas en functions.php

gracias de antemano, lo agradecería su ayuda, ya que es molestar a mí ......

Respuesta

21

Probablemente necesite utilizar la palabra clave global; de lo contrario, $db se considera una var en el ámbito local.

function sanitize ($data){ 
    global $db; 
    $db->mysqli_real_escape_string($data); 
} 

function user_exists($usermail){ 
    global $db; 
    $usermail = sanitize($usermail); 
    $query = $db->query("SELECT COUNT(userId) FROM users WHERE userEmail= '$usermail' "); 
    $check = $query->num_rows; 
    return ($check == 1) ? true : false; 
} 
+0

Oh, gracias a mi amigo :) No tienes idea de la cantidad de tiempo que puse en la solución de este problema tonto :) Me ha salvado el día. Gracias. – inrob

0

intento conectar dentro de la función, y la conexión debe ser incluida antes de incluir funciones.

Algo como esto:

function user_exists($usermail){ 
    $db = new MySQLi("localhost","test","test","test"); 
    $usermail = sanitize($usermail); 
    $query = $db->query("SELECT COUNT(userId) FROM users WHERE userEmail= '$usermail' "); 
    $check = $query->num_rows; 
    return ($check == 1) ? true : false; 
} 
+0

Gracias por su sugerencia. Pero supongo que no sería una buena idea incluir la consulta de conexión en cada función. Pero gracias ;) – inrob