0

私はまだ学習の初期段階にあり、頭を壁にぶつけて手がかりを探しています。無駄にマニュアルを読んでいました。

私は、phpAcadamy チュートリアル 'Register & Login' (パート 5-2) に基づいて、ユーザー ログイン システムを構築しています。mysql_connect()チュートリアルで使用していPDOますが、mysql の接続を使用しています。

ユーザー名がデータベースにあるかどうかに応じてuser_exists()returnsまたはtrueに依存する最初の関数を作成しています。(データベース内の自動インクリメントされた値)をfalseクエリします。user_idusername$usernameuser_id == 1truefalse

これが私のテスト コードです。一番下の if ステートメントは、その上の関数をテストする必要があります。

Fatal error: Call to a member function query() on a non-object が発生します

    <?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();
?>
4

1 に答える 1

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';
}
于 2013-04-29T02:18:33.637 に答える