#php #mysql #sql
#php #mysql #sql
Вопрос:
Кто-нибудь может сказать мне, что не так со следующим кодом —
for($i=0; $i<count($strnamearray); $i ){
echo $strnamearray[$i]."<br />";
$cordcquery = "SELECT `lat` , `lng` FROM `traffic` WHERE `strname` = '{$strnamearray[$i]}' LIMIT 0 , 30;";
$cordresult = mysql_query($cordcquery);
if (!$cordresult)
{
die('Invalid strncquery: ' . mysql_error());
}
while($cordrow = @mysql_fetch_assoc($cordresult)){
echo $cordrow['lng'].",".$cordrow['lat'];
echo "<br />";
}
}
Здесь $strnamearray[$i] — это массив, который содержит некоторое имя. после выполнения этого php-кода ошибка не отображается. Но проблема в том, что я не получаю желаемый результат…
Комментарии:
1. Что ж, это полезно. Что находится в таблице? Что находится в массиве? Какой результат вы получаете? Почему вы используете mysql в 2011 вместо mysqli или PDO и подготовленных инструкций? Вы так хотите получить атаку SQL-инъекцией?
2. @chx: В использовании
mysqli
overmysql
нет особых преимуществ, просто меняется интерфейс. Не весь код является ООП, и он не всегда должен быть таким.3. Прежде всего, что отображает «$ cordcquery»? И вы можете запустить это вручную? Когда я имею дело с SQL, я всегда проверяю, можно ли ввести выводимый запрос (ы) в командной строке или окне запроса и запустить. Во-вторых, это может не иметь никакого значения, но использование «@» перед функцией подавляет сообщения об ошибках.
Ответ №1:
Это попытка наугад, без дополнительной информации, за исключением двух вещей.
-
echo $cordcquery
просто чтобы убедиться, что sql выглядит правильно, и вы можете выполнить его непосредственно в MYSQL. Из того, что я могу сказать, это должно быть, но, не зная, что в переменных, я не уверен. -
Вместо
LIMIT 0, 30
использования justLIMIT 30
. Должно быть то же самое, но я видел некоторую странность в зависимости от того, какие версии php и mysql вы используете, с переходом к смещению ПРЕДЕЛА, количеству строк. Из того, что я могу вспомнить, это принимало бы смещение и не анализировало количество строк и, следовательно, не возвращало бы никакой информации.
Дайте мне знать, если это поможет.