2012-11-15 15 views
1

我在查詢MySQL數據庫中的表時收到錯誤。這是一個標準與mysqli_num_rows當出現在變量沒有值多數民衆贊成在傳遞:mysqli_num_rows()期望參數雖然在同一頁上的早期查詢工作

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in folder/file.php on line 29 

問題是我無法找到語法錯​​誤。我已經看了很多次了。這是我的代碼是:

$sql_messages = "SELECT * FROM messages WHERE to='$userid'"; 
$result_messages = $mysqli->query($sql_messages); 
$num_rows_messages = mysqli_num_rows($result_messages); 

我試過一個讀取數組,但是這給了我類似的錯誤。沒有什麼會傳遞到我想的$ result_messages。我重複了$ userid,並且有一個值,我檢查了我的數據庫,並且有一個'message'字段'to'。我已連接到正確的數據庫,因爲在此查詢前我有此代碼:

$sql="SELECT * FROM users WHERE firstname='$firstname' && lastname='$lastname'"; 
$result = $mysqli->query($sql); 
$row = mysqli_fetch_array($result); 

而且工作正常。這是頁面上的第三個查詢,是否存在某種限制?有沒有人看到我忽略的語法錯誤?謝謝,對不起,如果這是一個小小的錯誤!

回答

4

這是因爲$mysqli->query()返回布爾FALSE,其中,according to the mysqli::query() docs,它發生錯誤時。您可以通過訪問$mysqli->errno$mysqli->error獲取有關錯誤的更多詳細信息。

我猜問題的根源在於引用了一個名爲to,這是一個MySQL reserved word列的查詢。用反引號嘗試在查詢中圍繞單詞to。像這樣:

$sql_messages = "SELECT * FROM messages WHERE `to`='$userid'"; 

真的,儘管你應該避免命名列和表保留字。如果可行,考慮重命名該列。

+0

就是這樣。這是使用'to'這個詞。我沒有意識到這是已經保留的。我跑了錯誤信息,沒有回來,所以這是一個很好的抓住。很高興知道,我需要確保將我的領域在將來更獨特... – MillerMedia

+0

作爲旁註,您構建查詢的方式(通過字符串連接),您正在創建[SQL注入漏洞](https://www.owasp.org/index.php/Top_10_2010-A1)。考慮使用mysqli準備好的語句,或者如果可能的話使用PDO。 – Asaph

+0

好的,謝謝。我被告知PDO,我會研究它。我有點從頭開始。非常感謝你的幫助! – MillerMedia

相關問題