2013-04-29 2 views
0

im все еще на ранних этапах обучения, ударяя головой о стены, ища ключи. Я читал руководство безрезультатно. Im создание системы входа пользователя в систему на основе учебника phpAcadamy 'Register & Login'. Они используют mysql_connect в учебнике, но я использую PDO-соединение с mysql.Функция user_exists, использующая PDO connect to mysql

Я делаю свою первую функцию user_exists, которая запрашивает столбец имени моей таблицы для имен, которые соответствуют POSTED $ username, а затем возвращает true или false, если он найден.

вот мой код тестирования:

$host  = "localhost"; 
$username = "mholberg_skroovy"; 
$password = "*omitted*"; 
$dbname  = "mholberg_skroovytest"; 

$db = new PDO("mysql:host={$host};dbname={$dbname};", $username, $password); 

function user_exists($username) { 
    $query = $db->query("SELECT `users`.`username` FROM `users` WHERE `username` = '$username'"); 
    return($query, 0) == 1) ? true : false; // ??? 
} 

if (user_exists('junkomatic') === true) { 
    echo 'exists'; 
} 

die(); 

если заявление на дне следует проверить функцию над ним. Линия с ??? это черта, которая, очевидно, неверна. Я получаю сообщение об ошибке «,» Любой ввод/объяснение будет чрезвычайно оценен.

+2

Вы определенно получил ваш ответ ниже, но мне интересно. Что возвращает ($ query, 0) == 1)? true: false; действительно? (Я этого раньше не видел) – bestprogrammerintheworld

+0

@bestprogrammerintheworld в теории выдает ошибку, в любом случае отсутствует скобка! – Ivo

+0

@bardoo - Я попытался объяснить еще больше. Я не знаю, что делает ваш фактический код, но я ответил, что, возможно, сделал это (вернусь, когда есть пользователь) – bestprogrammerintheworld

ответ

-1

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

$stmt->execute(); 
+0

Откуда взялась «$ stmt»? (Я знаю, что это «$ statement» в документах, но OP не использовал его) Почему этот ответ принят? –

+0

@DiegoNunes он, вероятно, дал ему необходимый вход, чтобы посмотреть остальное сам в документах, я думаю! концептуально это была единственная часть, отсутствующая в коде! вы не можете получить доступ к набору результатов без выполнения вашего заявления! – Ivo

0

Похоже, что вы не выполняете свой запрос, поэтому это не работает proprely. Вы можете просто добавить команду выполнить, просто добавьте

$query = $db->query("SELECT `users`.`username` FROM `users` WHERE `username` = '$username'"); 
$query->execute(); 
1

Ваша функция не использует подготовленное заявление. $ db не определен внутри функции, поэтому код будет генерировать ошибку.

Вы должны сделать что-то вроде этого, вместо:

function user_exists($db, $username) { 
    $query = $db->query("SELECT COUNT(`idUser`) FROM `users` WHERE `username` = :username"); 
    $query->execute(array(':username'=> $username)); 
    $cnt = $query -> fetch(); //Get actual count of users 

    return $cnt >= 1 ? true : false; //This will return true if count is one or larger else it would return false 
}