mysql: соединение в порядке, но ошибка ответа

0

это мой код:

    $Line = mysql_real_escape_string(postVar("showline"));
    $Model = mysql_real_escape_string(postVar("showmodel"));
    $NIK = mysql_real_escape_string(postVar("showNIK"));

          $sql ="SELECT NIK,Line,Model FROM inspection_report";
          $sql.="WHERE NIK='".$NIK."' AND Model LIKE '%".$Model."%' AND Line='".$Line."'";
          $sql.="ORDER BY Inspection_datetime DESC LIMIT 0 , 30";

$dbc=mysql_connect(_SRV, _ACCID, _PWD) or die(_ERROR15.": ".mysql_error());
mysql_select_db("qdbase") or die(_ERROR17.": ".mysql_error());
$res=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error() );  // submit SQL to MySQL and error trap.
$num=mysql_affected_rows();
$objJSON=new mysql2json();
print(trim($objJSON->getJSON($res,$num,'aaData',false)));

mysql_free_result($res);

у firebugs показывает, что подключение к странице процесса нормально... но при ответе показать ошибку.. где моя вина?

Теги:
concat

4 ответа

1
Лучший ответ

Я предполагаю, что это PHP.

Добавьте команду echo $sql; после ваших строк выше. Уверен, что ваш запрос неверен, т.е. Нет пробела между концом предложения FROM и WHERE. То же самое с ORDER BY. Бывает все время;)

  • 0
    после того, как добавить пробел у них .. ответ не показывают данные, которые получают из базы данных .. почему?
  • 0
    Добавьте вывод из echo $sql; на ваш оригинальный пост, и давайте еще раз посмотрим.
Показать ещё 7 комментариев
1

То, что сказал Джейсон, хорошо и покажет вам, где ошибка, которая выглядит как нехватка пробелов в разрывах строк. Добавьте пробел до WHERE и еще до ORDER

  • 0
    посмотрите на мой полный пост ..
  • 0
    @klox вы можете сделать, как попросил Джейсон, и отредактировать исходное сообщение и вставить в вывод, который echo $sql; показывает пожалуйста. Дополнительный код - это здорово, но сейчас взгляд на завершенный запрос может помочь нам немного больше.
Показать ещё 1 комментарий
0

Я нашел намного проще писать и читать свои SQL-заявления, объявляя SQL String в одном наборе кавычек, как в:

$sql ="SELECT NIK,Line,Model FROM inspection_report
WHERE NIK='$NIK' AND Model LIKE '%$Model%' AND Line='$Line'
ORDER BY Inspection_datetime DESC LIMIT 0 , 30";

Этот метод также решит вашу проблему с отсутствующими пробелами между строками.

0

Как указано в других ответах, вам не хватает пробелов в вашем запросе:

$sql = "SELECT .... inspection_report";
$sql .= "WHERE NIK=..."
etc...

будет генерировать строку запроса:

SELECT ... inspection_reportWHERE NIK=...
                           ^^--- problem is here

Обратите внимание на отсутствие пробела перед предложением WHERE. Вы должны либо изменить свои инструкции конкатенации строк, чтобы явно включить пробел:

$sql = "SELECT ... inspection_report";
$sql .= " WHERE NIK=..."
         ^---notice the space here

или используйте альтернативный синтаксис для построения строки. Для многострочных присвоений строк обычно всегда предпочтительнее использовать HEREDOC s, если вам не нужно конкатенации результатов или констант вызова функции в строка:

$sql = <<<EOL
SELECT ... inspection report
WHERE NIK=...
EOL;

PHP будет соблюдать разрывы строк внутри heredoc, и MySQL будет молча рассматривать их как пробелы, сохраняя целостность вашего запроса.

  • 0
    Я думаю, что мы оба только что открыли значок Терпения ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню