2013-07-29 5 views
0

У меня есть следующий запрос: MysqliMySQLi запрос пропуская первые 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 Amazon, чтобы вернуть 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'] . "'"); 

Update $ запуск:

$run=$run+5; 

и он проходной снова. Однако мой вывод пропускает первые 5 строк в таблице и возвращает следующий 5. Кроме того, после запуска около 20 или около того записей, он снова пропускает 5. Строки, которые он обрабатывает, он делает правильно, что я проверяю по эхо запроса. Когда я использую запрос в Navicat, замените $ run на 0, все выглядит нормально, возвращаются первые 5 строк.

Любая идея, что я сделал не так, или как я могу это исправить? Я никогда не сталкивался с этим в прошлом и использовал почти тот же запрос для разных отчетов.

ответ

0

Если вы хотите вернуть определенный диапазон записей, обязательно добавьте пункт order by. MySQL может изменить порядок строк между запросами.

Другой, возможно, еще более правдоподобный факт, заключается в том, что запрос иногда может быть неудачным. Например, если одно из полей содержит недопустимый символ, это может сломать ваш запрос, вернуть false вместо результата запроса mysqli и, следовательно, не вывести ничего.

Вы используете addslashes, чтобы избежать строк, но это не правильный способ сделать это. Вы можете использовать mysqli_real_escape_string, или даже лучше: использовать параметризованные запросы (подготовленные операторы).

+0

Я использовал порядок от isbn13 до, и не было никакой разницы. Что бы вы предложили вместо addlashes? Это то, что работает для моей команды обновления. – Jim

+0

Спасибо за информацию о mysqli_real_escape_string, но это все еще не решает мою проблему пропущенных записей. Меня это больше всего волнует. – Jim

Смежные вопросы