2017-08-03 9 views
-2

私はこのエラーを修正する方法について複数回答を見てきましたが、私は自分のコードにそれを適用するかどうかはわかりません。私はそれがここで答えに応じてmysql_resultとは何かを持っていると思う警告:mysql_result()はパラメータ1がリソース、オブジェクトであると想定していますか?

function user_exists($username) { 
    $username = sanitize($username); 
    global $con; 
    return (mysql_result(mysqli_query($con, "SELECT COUNT(`user_id`) FROM `users` WHERE `username` ='$username' "), 0) == 1) ? true : false; 
} 

mysql_result() expects parameter 1 to be resource, object given。私は自分のコードでどのように動作させるのですか?

EDIT:

function login($username, $password){ 
     $user_id = user_id_from_username($username); 
     global $con; 
     $username = sanitize($username); 
     $password = md5($password); 

     return (mysqli_num_rows(mysqli_query($con, "SELECT COUNT(`user_id`) FROM `users` WHERE `username`='$username' AND `password`='$password'"))==1) ? $user_id : false; 
} 
+0

このような関数を埋め込まないと、正しくデバッグできなくなる – rtfm

+3

[PHPでMySQL APIを混ぜることはできますか?](https://stackoverflow.com/questions/17498216/can-i-mix-mysql -apis-in-php)... mysqli_とmysql_を混在させています... – Scuzzy

+0

義務:mysql_の使用を中止します* – rtfm

答えて

0

あなたが有効ではありませんmysqlmysqli APIをミックスしようとしています。 mysql_result()に直接相当するものはmysqliにはありません。

mysqliを適切に使用してください。準備されたステートメントを使用することもできます(サニタイズする必要はありません)。

function user_exists($username) { 
    global $con; 
    $stmt = mysqli_prepare($con, "SELECT COUNT(*) FROM users WHERE username = ?"); 
    mysqli_stmt_bind_param($stmt, "s", $username); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_bind_result($stmt, $count); 
    mysqli_stmt_fetch($stmt); 
    return $count == 1; 
} 

あなたは本当にそれが常に一致の数を含む単一の行を返すために、クエリでCOUNT()を使用していない、mysqli_num_rowsを使用したい場合

return mysqli_num_rows(mysqli_query($con, "SELECT 1 FROM `users` WHERE `username`='$username' AND `password`='$password'")) == 1; 

ただし、準備済みのステートメントを使用していないため、これを行うのは難しい方法です。

パスワードハッシュにMD5を使用しないでください。PHPのpassword_hash()機能を使用してください。

+0

ありがとうございます。だから、私は同じ 'WHERE username = '$ username'をそのクエリに使用しません。ちょうどusername =? " –

+0

いいえ、それはbind_paramのためのものです。ドキュメントの準備文について読む。 – Barmar

+0

これはこれまでのところよくできているようですが、感謝します!@Barmar –

関連する問題