我有這個變量來存儲函數的結果:$var check=mailExists($email,$link)
。它應該是1或2,但總是會返回1 ... $email
是要在DB處檢查的傳遞值,$link
是一個mysqli處理程序。我也印刷的獲取結果在'rowsDEB'
,它總是顯示爲0。這裏是我的功能:爲什麼抓取不能在SQL中工作
function mailExists($email, $link){
$stmt = "";
$result = 1; //no such mail
$stmt = "SELECT email FROM users WHERE email = '$email'";
mysqli_query($link,$stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt);
$rows = 0;
while(mysqli_stmt_fetch($stmt)){
$rows++;
}
$_SESSION['rowsDEB'] = $rows;
if(rows != 0) $result = 2; //mail exists in DB
mysqli_stmt_free_result($stmt);
mysqli_stmt_close($stmt);
discDB($link);
return $result;
}
你需要重讀mysqli的手冊頁(見http://php.net/manual/en/mysqli- stmt.store-result.php) - $ stmt只是一個字符串,而不是一個mysqli_stmt - 看看手冊是如何創建它的。你不應該像這樣將一個變量傳遞給一個SQL語句;這是一個巨大的安全漏洞。 – OSborn
我的電子郵件變量在另一個地方被檢查,安全性在這裏不是問題。 –
請注意,您的函數會更好,更有效的計數查詢,而不是做一個選擇和迭代計數;爲你的方法返回1和2,而不是一個布爾值(或0和1) – Gorkk