проблема с запросом php / mysql

#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 over mysql нет особых преимуществ, просто меняется интерфейс. Не весь код является ООП, и он не всегда должен быть таким.

3. Прежде всего, что отображает «$ cordcquery»? И вы можете запустить это вручную? Когда я имею дело с SQL, я всегда проверяю, можно ли ввести выводимый запрос (ы) в командной строке или окне запроса и запустить. Во-вторых, это может не иметь никакого значения, но использование «@» перед функцией подавляет сообщения об ошибках.

Ответ №1:

Это попытка наугад, без дополнительной информации, за исключением двух вещей.

  1. echo $cordcquery просто чтобы убедиться, что sql выглядит правильно, и вы можете выполнить его непосредственно в MYSQL. Из того, что я могу сказать, это должно быть, но, не зная, что в переменных, я не уверен.

  2. Вместо LIMIT 0, 30 использования just LIMIT 30 . Должно быть то же самое, но я видел некоторую странность в зависимости от того, какие версии php и mysql вы используете, с переходом к смещению ПРЕДЕЛА, количеству строк. Из того, что я могу вспомнить, это принимало бы смещение и не анализировало количество строк и, следовательно, не возвращало бы никакой информации.

Дайте мне знать, если это поможет.