简单的user_exists函数使用PDO连接到mysql

时间:2013-04-29 02:14:20

标签: php database pdo

我还处于早期学习阶段,我的头撞在墙上寻找线索。我一直在阅读手册无济于事。

我正在构建一个基于phpAcadamy教程的用户登录系统'Register&登录'(第5-2部分)。他们在教程中使用mysql_connect(),但我使用PDO连接mysql。

我正在创建我的第一个函数user_exists()returns一个truefalse,具体取决于用户名是否在数据库中。 当user_id =发布username时,它会查询$username(数据库中的自动递增值),然后取决于user_id == 1,返回truefalse

这是我的测试代码: 底部的if语句应该测试它上面的函数。

  

我收到致命错误:在非对象上调用成员函数query()

    <?php

    $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`.`user_id` FROM `users` WHERE `username` = '$username'");
    return(mysql_result($query, 0) == 1) ? true : false;                //???
}



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

1 个答案:

答案 0 :(得分:1)

您需要将连接对象($db)带入函数的范围。

这是一个例子

function user_exists(PDO $db, $username) {
    $stmt = $db->prepare('SELECT COUNT(1) FROM `users` WHERE `username` = ?');
    $stmt->bindParam(1, $username);
    $stmt->execute();
    return (bool) $stmt->fetchColumn();
}

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

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8",
    $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if (user_exists($db, 'junkomatic')) {
    echo 'exists';
}