2014-02-19 2 views
1

Я работаю над изменением кода с MySQL на MySQLi, и все его показалось, что будет хорошо, но я ударил немного о стену, в настоящее время я застрял на замене мои функции user_exists и я пытался смотреть в другую причину, почему и что происходит не так, но это, кажется, запрос, я сделал var_dump ($ результат) и получил ответ NULL и сказали, что его вниз к моему запрос тогда, поэтому я попробовал выполнить sql-поиск на phpmyadmin и получил результат, поэтому я думал, что он привязан к мне, привязывая $ username к ? как ошибки, которые я получаю, это то, что он не может найти имя пользователя, пытающееся войти в систему.user_exists функция с использованием mysqli

function user_exists($username) { 
$db = $GLOBALS['db']; 
$username = trim($username); 
//sql 
$sql = "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = ?"; 
//Prepare 
$result = $db->prepare($sql); 
//Bind 
$result->bind_param('s', $username); 
//execute 
$result->execute(); 
//Bind-Results - the 2 codes below are noted out cause im not sure they are needed but have tried with and without them 
//$result->bind_result($user_id); 
//$result->fetch(); 

if (false === $result) { 
    return false; 
} 
return ($result->num_rows === 1); 
} 

я могу предоставить код на signin.php, но им не уверен, что это было бы полезно, как это все работает, прежде чем я начал менять функцию.

Если кто-то может указать, что, где и почему его не работает, можете ли вы объяснить, чтобы я мог понять, что я хорош для будущего и, возможно, способен помочь другим.

+1

Похоже, что он должен работать. Do 'if (! $ Result) echo $ db-> error;' сразу после вызова 'prepare()'. –

+0

@MichaelBerkowski ничего не приходит, его действительно озадачивает меня, я думал, что наконец понял все эти вещи mysqli, готовил и связывал, а что нет. потому что функция находится на собственной странице, и я думаю о том, что просто выполняю функцию на самой странице signin.php, посмотрим, удалит ли это что-нибудь, что myabe делает $ username, а не на самом деле. –

+0

У вас появилось сообщение об ошибках? Возможно, что-то еще произошло раньше. 'Error_reporting (E_ALL); ini_set ('display_errors', 1); ' –

ответ

0

Перед проверкой количества строк вам необходимо позвонить $result->store_result(). mysqli_stmt::store_result() загрузит результирующий набор из подготовленного оператора, чтобы вы могли получить доступ к результатам и свойствам.

EDIT: Это своего рода, как бы я это сделать, хотя (непроверенные):

function user_exists($username) { 
    global $db; 

    //sql 
    $sql = "SELECT `user_id` FROM `users` WHERE `username` = ?"; 
    //Prepare 
    if (!($result = $db->prepare($sql)) return false; 
    //Bind 
    if (!$result->bind_param('s', trim($username))) return false; 
    //execute 
    if (!$result->execute()) return false; 
    //Bind-Results 
    $result->bind_result($user_id); 
    $result->fetch(); 
    $result->close(); 

    return $user_id ?: false; 
} 
+0

, поэтому я добавил то, что вы предложили, но все, что он сделал, - это комбинация имени пользователя и пароля для входа в систему –

+1

Это потому, что вы выполняете 'SELECT COUNT (user_id)', который всегда будет возвращать строку. Просто выберите «SELECT user_id». – miken32

+0

ОК изменилось, что сейчас, в то же время, я нашел это онлайн, и он работал над этим человеком, будет ли он работать, или я буду лучше придерживаться того, как у меня его есть, и вместо этого это исправление? ... function user_exists ($ username, $ db) { $ sql = "SELECT COUNT (*) FROM users WHERE username =?"; $ result = $ db-> prepare ($ sql); $ result-> bind_param ('s', $ username); $ result-> execute(); $ result-> fetch_row(); return ($ result [0] == 1)? true: false; } –

0

Вот как мой user_exist() функция закончилась

function user_exists($username) { 
$db = $GLOBALS['db']; 

//sql 
$sql = "SELECT user_id FROM `users` WHERE `username` = ?"; 
//Prepare 
$result = $db->prepare($sql); 
//Bind 
$result->bind_param('s', $username); 
//execute 
$result->execute(); 
//store result 
$result->store_result(); 

if (false === $result) { 
    return false; 
} 
return ($result->num_rows === 1); 
} 

Я надеюсь, что это помогите кому-нибудь. Но если какой-либо из кодов не должен быть там, я извиняюсь заранее, код был там по какой-то причине в один момент, но поскольку я все это изучил, никто не советовал мне, что он не должен быть там .. надеюсь, что это поможет

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