2012-05-31 3 views
12

Sto provando a creare alcune funzioni per un mio sito Web e alcune di esse consistono nello durante il recupero dei dati dal database mysql. Quando eseguo il test del codice all'esterno della funzione , sembra che funzioni correttamente. Così qui è, la prima pagina:query mysqli/mysql all'interno della funzione non funzionante

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

$email = '[email protected]'; 

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

Ora DB.php:

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

e il file 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; 
} 

E l'errore che sto ottenendo quando l'accesso al primo file è:

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 'richiesto/incluso il db.php dove $ db è il mysqli connect. E nello stesso file (primo file) che io chiamo le funzioni situate functions.php

Grazie in anticipo, mi farebbe piacere il vostro aiuto in quanto si tratta di me incazzare ......

risposta

21

Probabilmente hai bisogno di usare la parola chiave global, altrimenti $db è considerata una var in ambito locale.

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

si Oh ringraziare il mio amico :) Non avete idea di quanto tempo ho messo sulla soluzione di questo problema stupido :) Hai salvato la mia giornata. Grazie. – inrob

0

Provare a connettersi all'interno della funzione e la connessione deve essere inclusa prima di includere le funzioni.

Qualcosa di simile a questo:

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

Grazie per il tuo suggerimento. Ma immagino che non sarebbe una buona idea includere la query di connessione in ogni singola funzione. Ma grazie ;) – inrob