我已經將我的很多舊版本的MySQL的東西的MySQLi在PHP和我在下面的代碼得到一個問題:PHP的mysqli prepare語句未能返回行
### 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使用相同的查詢從數據庫中的一行
我哪裏錯了?
編輯
我試圖改變查詢到一個基本的沒有約束力的PARAMS - 「SELECT * FROM表」 仍然沒有得到返回的行。所以這不是查詢本身,它會在我的順序/格式的準備,執行情況
秒編輯:我已經添加了$ stmt-> store_result()代碼,仍然返回0行數。
第三編輯: 我調查了看起來很好的連接和用戶設置。我可以使用相同的用戶和密碼通過控制檯連接到數據庫,並且數據庫名稱相同。我真的難倒這個:(
不是一個答案,但請不要使用md5來散列密碼。它完全破碎。看看bcrypt,你也可能想閱讀salting密碼。 – PeeHaa 2012-08-15 22:54:49
你確定有匹配的行嗎?你是否嘗試過'echo'聲明和值並手動運行查詢? – PeeHaa 2012-08-15 22:57:17
是的,這就是printf的用途,輸出它正在運行的確切查詢,並返回行。我正在嘗試其他一些東西。我認爲這可能與某種準備/執行步驟有關我缺少 – elzaer 2012-08-15 23:00:14