2013-07-29 37 views
0

我有以下的mysqli查詢:庫MySQLi查詢跳過前5行

$run = 0; 
$result = $conn->query("SELECT title, author,i.isbn13, i.sku, quantity, weight, listed_price 
from book 
LEFT JOIN inventory i on book.isbn13 = i.isbn13 
where quantity > 0 and i.isbn13 like '978%' limit $run, 5"); 

,然後我通過亞馬遜的API返回的XML數據運行。然後我解析與更新我的表:

$conn->query("update book set author = '" . addslashes($amazonResult['Author']) . "', title ='" . addslashes($amazonResult['Title']) . "', 
     edition='" . addslashes($amazonResult['Edition']) . "', 
     weight='" . $amazonResult['Weight'] . "', publisher='" . addslashes($amazonResult['Publisher']) . "', binding='" . $amazonResult['Binding'] . "', 
     pub_date='" . $amazonResult['PublishDate'] . "', listed_price = '" .$amazonResult['ListPrice'] . "' 
     where isbn13 = '" . $amazonResult['isbn'] . "'"); 

更新$運行:

$run=$run+5; 

,並把它遍歷一次。然而,我的輸出跳過表中的前5行並返回下一個5.此外,在運行大約20條記錄之後,它再次跳過5條記錄。它處理的行,它正確,我通過查詢的回聲驗證。當我在Navicat中使用查詢時,將$ run替換爲0,一切都很正常,返回前5行。

任何想法我做錯了什麼或我該如何解決這個問題?過去我從未遇到過這種情況,併爲不同的報告使用幾乎相同的查詢。

回答

0

如果您想要返回特定範圍的記錄,請確保還要添加order by子句。 MySQL可能會改變查詢之間的行順序。

另一個可能更可信的原因是查詢有時可能失敗。例如,如果其中一個字段包含無效字符,則可能會破壞查詢,返回false而不是mysqli查詢結果,因此無法輸出任何內容。

您正在使用addslashes來轉義字符串,但這不是正確的方法。您可以使用mysqli_real_escape_string,甚至更好:使用參數化查詢(預準備語句)。

+0

我確實使用了isbn13 asc的順序,並沒有區別。你會建議,而不是addslashes?這是我的更新命令的作品。 – Jim

+0

感謝有關mysqli_real_escape_string的信息,但仍不能解決我跳過記錄的問題。這是我最關心的。 – Jim