0

これを変換する必要があります:

function user_data($user_id) {
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);   

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM users WHERE user_id = $user_id"));

        return $data;
    }

}

これに:

function user_data($user_id) {
    $data = array();
    $user_id = (int)$user_id;
    $func_num_args = func_num_args();
    $func_get_args = func_get_args();
    if ($func_num_args > 1) {
        unset($func_get_args[0]);   
        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");
        $query->bindParam(":user_id", $user_id);
        $query->execute();
        $data = $query->fetch(PDO::FETCH_ASSOC);
        print_r ($data);
    }
}

問題は、2 番目のビットが機能しないことです。私はこれを取得し続けます:

致命的なエラー: 39 行目の /home/ds4887/public_html/silverjet/v1.20/admin/core/functions/main.php の非オブジェクトに対するメンバー関数 prepare() の呼び出し

他に情報が必要な場合は、喜んで提供させていただきます。不可能な場合は、誰かがこれを行う正しい方法を教えてください。上が機能し、下が機能する必要があります。

前もって感謝します

4

3 に答える 3

3

$db内で定義されていませんuser_data()。そのため$db->prepare()、エラーで失敗します。

PDO 接続を確立し、次のいずれかの方法でuser_data()アクセスできるようにする必要があります。$db

于 2013-09-05T02:32:28.263 に答える
0

私の推測では、変数のスコープに問題があると思います。変数を関数に渡す$dbか (推奨)、global $db宣言を使用して変数をグローバル スコープから関数のスコープにインポートする必要があります。

mysql_query()以前の関数は、クエリの接続を指定せずに、一種のハックな方法で使用していたためにのみ機能しました。この場合のデフォルトの動作は、最近開いた mysql リソース リンクをグローバルに使用することなので、たまたまうまくいきました。

于 2013-09-05T02:32:13.223 に答える
0

この行の $db の値を渡していません:

  $query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");

$db は、データベースに接続したときに設定された接続リソースです。PDO では必要ですが、最後に確立した接続を前提としてmysqlいるため、なくても問題ありません。mysql

于 2013-09-05T02:33:30.920 に答える