古い MySQL の多くを PHP で MySQLi に変換していますが、次のコードで問題が発生しています。
### FETCH INCLUDES ###
$player=$_POST['player'];
$password=md5($_POST['password']);
#### DB CONNECTION ####
if(!$mysqli=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME)) {$err=$mysqli->error; print($err); }
$sql="SELECT * FROM accounts WHERE name='?' AND passkey='?'";
if($stmt=$mysqli->prepare($sql)) {
//$stmt->bind_param('ss',$player,$password);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows==1) {
$account=$stmt->fetch_assoc();
// purely for debugging
print_r($account);
if($_SESSION['account']=$account) $account=true;
} else {
echo "Failed. Row count: ";
print($stmt->num_rows);
echo "<br />";
$query=str_replace('?','%s',$sql);
printf($query,$player,$password);
$account=false;
}
$stmt->close();
} else {
$err=$mysqli->error;
print($err);
}
障害をクエリ自体に絞り込みました。エラーなしで0行が返されるので、クエリを出力すると思いました(str_replaceがそこにあるもの)。クエリを使用して、PHPMyAdminから同じクエリを使用してデータベースから行を返すことができます
どこが間違っていますか?
編集
パラメータをバインドせずにクエリを基本的なものに変更しようとしました-「SELECT * FROM table」はまだ行が返されません。したがって、それはクエリ自体ではなく、準備、実行状況の私の順序/形式の何かになります
2 番目の編集: $stmt->store_result() をコードに追加しましたが、まだ 0 行カウントが返されます。
3番目の編集:接続とユーザー設定を調査しましたが、問題ないようです。同じユーザーとパスワードを使用してコンソール経由でデータベースに接続でき、データベース名も同じです。私はこれに本当に困惑しています:(