2012-05-31 1 views
12

Я пытаюсь создать некоторые функции для моего сайта, а некоторые из них состоят из извлечения данных из базы данных mysql. Когда я тестирую код вне функции , он работает нормально. Так вот, первая страница:mysqli/mysql query внутри функции не работает

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

$email = '[email protected]'; 

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

Теперь DB.php:

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

И файл 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; 
} 

И ошибка я получаю, когда доступ к первому файлу:

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 've required/included the db.php, где $ db - это соединение mysqli. И в тот же файл (первый файл) я зову функции, расположенные в functions.php

Спасибо заранее, я ценю вашу помощь, как это писает меня ......

ответ

21

Вероятно, вам нужно использовать ключевое слово global, в противном случае $db считается var в локальной области.

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

О, спасибо, мой друг :) Вы не имеете ни малейшего представления, сколько времени я положил на решении этой глупой проблемы :) Вы сохраненную мой день. Спасибо. – inrob

0

Попробуйте подключиться внутри функции, и подключение должно быть включено до включения функций.

Что-то вроде этого:

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

Спасибо за ваше предложение. Но я думаю, что было бы неплохо включить запрос соединения в каждую отдельную функцию. Но спасибо ;) – inrob

Смежные вопросы