mysql: соединение в порядке, но ошибка ответа - PullRequest
0 голосов
/ 29 июня 2010

это мой код:

    $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 показывает, что соединение с страницей процесса в порядке ... но при ответе показывают ошибку .. где моя ошибка?

Ответы [ 4 ]

1 голос
/ 29 июня 2010

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

1 голос
/ 29 июня 2010

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

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

0 голосов
/ 29 июня 2010

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

$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 голосов
/ 29 июня 2010

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

$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";

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

...