1

phpMyAdmin でこれを行うと、1 つの結果が得られます。

SELECT password, block FROM jml_users WHERE username = "user01" 

ただし、私の PHP コードでは、スクリプトがユーザーを見つけられません。私は何か間違ってい$stmt->bind_param("s", $unsafe_user);ますか?

私も$stmt->bind_param("s", "user01");運が悪かったので試してみました。

<?
include("dbinfo.php");
$unsafe_user = "user01";
$mysqli = new mysqli($loginURL, $dbusername, $dbpassword, $database);

LoginCheck();

// Kill connection 
$thread_id = $mysqli->thread_id;    // determine our thread id 
$mysqli->kill($thread_id);
$mysqli->close();

function LoginCheck()
{
    global $mysqli, $unsafe_user;   

    //Perpare Statement.    
    //if($stmt = $mysqli->prepare("SELECT password, block FROM jml_users WHERE (username) VALUES (?)")) // this returns false for some reason
    if($stmt = $mysqli->prepare("SELECT password, block FROM jml_users WHERE username = ?")) //works, still safe form sql injection?
    {
        $stmt->bind_param("s", $unsafe_user);
        $stmt->execute();

        $stmt->bind_result($dbpw, $bdblock);

        if($stmt->num_rows == 0)
        {
            echo "could not find user";
        }
        // Found user
        else
        {
            echo "found user";
        }

        $stmt->close();
    }
    else
    {
        echo "Statement creation did not succeed";
    }
}
?>
4

1 に答える 1

1

コメントアウトした最初のクエリは、無効な MYSQL 構文です。そのタイプの構文は挿入用です。

$stmt->store_result();また、 afterを使用しない限り、 num_rows は準備済みステートメントでは機能しません$stmt->execute();

ドキュメントでこの回答を確認してください。

于 2013-11-25T13:32:11.193 に答える