2017-06-20 6 views
0

私は最近mysqlをmysqliに使用することから自分のコードを変更し、WAMPローカルサーバーによって表示されるすべてのエラーを解決しました。しかし、ログインメカニズムが壊れています。これにより、パスワードの正誤に関係なく、ユーザーはログインできます。私はmysqliに切り替える前に正常に動作した作業を行うために、次の関数を使用しています。ここで何が間違っていますか?mysqlからmysqliにコードを切り替えた後にmysqli_data_seekが機能しないのはなぜですか?

function login($registration_id, $password) { 
    include 'core/database/connect.php'; 

    $registration_id = sanitize($registration_id); 
    $password = sanitize($password); 
    $query = mysqli_query($link, "SELECT COUNT(`sr`) FROM `main_table` WHERE `registration_id` = '$registration_id' AND `password` = '$password'"); 
    return (mysqli_data_seek($query, 0) == 1) ? $registration_id : false; 

    mysqli_close($link); 
} 
+1

まず、あなたのコードは、SQLインジェクションへの陰茎です。エスケープするか、または準備されたステートメントを使用します。次に、mysqli_closeリンクは決して実行されません。 (PHPが終了すると自動的に接続を閉じます(。 – vaso123

+0

mysqli_queryに 'COUNT(\' sr \ ')'に問題があるようですが)単純に 'sr'に置き換えて動作していますが、それがなぜそうであるかについての手がかり。 – user1543784

答えて

1

mysqli_data_seek()関数は、呼び出しが成功したかどうかを示すブール値を返します。基になるSQLクエリの結果から何も返されません。

SQLクエリはselect count(...)なので、結果セットには常に1行が返されます。したがって、sgが間違っていない限り、mysqli_data_seek()の結果は常にtrueになります。これは誰もがログインできることを意味します。

戻り値をcount()関数で読み取って、成功例はmysqli_fetch_array()です。

関連する問題