Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
 
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
1

Sql-запрос возвращает ошибку в ajax

02.10.2018, 10:18. Просмотров 395. Ответов 20
Метки ajax, js, php, sql (Все метки)

Доброго времени суток!

Делаю SQL-запрос к БД через ajax и проваливаюсь в ошибку.

Сам запрос обкатан в MS SQL Management Studio - отрабатывает правильно. В php конкретные значения заменены на переменные. Помогите найти в чем ошибка!

функция, вызываемая по событию onclick:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function getActiveDevice(tec_id, device_id) {
     $.ajax({
          url: "php/sqlQuery.php",
          type: "GET",
          dataType: "json",
          async: "false",
          data: 
            {
            tec_id:tec_id,
            device_id:device_id
            },
          success:function(result)
          {
              console.log("Success: ", result)
          },
          error:function(result) {
              console.log("error", typeof result, result);
          },
      });
}
запрос к БД в sqlQuery.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
  $id_tec = $_GET['tec_id'];
  $id_device = $_GET['device_id'];
 
  include_once '../php/DBconnect.php'; 
 
  if ($id_tec == 0) {  // в базе id_tec начинается с 1, поэтому возвращаем результат 'all' и завершаем... кстати тоже не работает ;)
    echo "all";
    exit();
    } else {
       $db_query = "SELECT gftec.[Id]
                        ,gftec.[ID_TEC]
                        ,gftec.[dattime]
                        ,gftec.[p]
                        ,gftec.[t]
                        ,gftec.[q]
                        ,gftec.[tabl]
                          ,Device.[ID]
                          ,Device.[Name]
                          ,Device.[OrderNum]
                          ,Device.[IdDataType]
              FROM (
                SELECT * FROM gftec WHERE [ID_TEC]=".$id_tec.") AS gftec JOIN (
                SELECT * FROM Device WHERE [Id_tec]=".$id_tec.") AS device ON gftec.[tabl]=device.[ID]
              WHERE gftec.[Id] IN (select max(Id) FROM gftec WHERE gftec.[ID_TEC]=".$id_tec." GROUP BY gftec.[tabl])
                ORDER BY device.[OrderNum]";
   }
    $odbc_result = odbc_exec($db_connect,$db_query);
    $device_count = odbc_num_rows($odbc_result);
 
    if ($odbc_result)
        for ($i=0; $i <$device_count ; $i++) {
          $res_d_name[$i] = odbc_result($odbc_result,"Name");
          $res_p[$i] = odbc_result($odbc_result,"p");
          $res_t[$i] = odbc_result($odbc_result,"t");
          $res_q[$i] = odbc_result($odbc_result,"q");
          $res_dattime[$i] = date("d:m:Y h:i:s", strtoTime(odbc_result($odbc_result,"dattime")));
          odbc_fetch_row($odbc_result);
       }
        echo json_encode(array('c' => $device_count, 'd_name' => $res_d_name, 'p' => $res_p, 't' => $res_t, 'q' => $res_q, 'dattime' => $res_dattime));
      }
    else
     {          echo "\n - NOT table readed";   }
 
?>
лог результата выполнения:
error object [object Object]
проблема явно в SQL, т.к., если упрощаю запрос до выборки из 1 таблицы,
PHP
1
2
3
4
5
6
7
8
9
10
11
$db_query = "SELECT [Id]
                     ,[ID_TEC]
                     ,[dattime]
                     ,[p]
                     ,[t]
                     ,[q]
                     ,[tabl]
                  FROM [GF].[dbo].[gftec]
                  where [ID_tec]=".$id_tec." and [Id] in (select max(id) from [GF].[dbo].[gftec]
                                                                  where [ID_TEC]=".$id_tec."
                                                                  group by [tabl])";
дает результат
Success: [object Object]
p.s. надеюсь с разделом форума не ошибся...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2018, 10:18
Ответы с готовыми решениями:

Ajax-запрос возвращает знаки ? (крокозябры)
Добрый день! Написал ajax-запрос к php-файлу, вроде работает, но возвращает знаки вопроса...

Кодировка в ajax, возвращает с сервера крякозябрики
м, при ajax запросе возвращает мне крякозябрики вот код &lt;script&gt;...

Ajax - вызывает ошибку в IE
new Ajax(a.getProperty('href'),{method:'get',update:'lightbox_content',data:'tolightbox='+1,...

Ajax запрос
Делаю приложение на ASP.Net MVC4. У меня есть форма для сортировки данных, что в таблице. Свой POST...

Ajax запрос
Суть такова: при заходе на страницу php скрипт берет данные из бд и отдает jsу посредством ajax...

20
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 10:40 2
Цитата Сообщение от leech Посмотреть сообщение
Javascript
1
dataType: "json",
PHP
1
2
echo "all";
exit();
Во-первых, вы ожидаете на выходе данные в формате JSON, а ваш скрипт в некоторых случаях может вернуть обычный текст.
Уберите параметр dataType
Также перепишите ваш обработчик ошибок следующим образом:
Javascript
1
2
3
4
error:function(jqXHR, textStatus, errorThrown) {
  console.log('textStatus: '+ textStatus);
  console.log('error: ' + errorThrown);
},
Посмотрим, что там у вас.
1
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 11:12  [ТС] 3
1. действительно помогло с "побочной" проблемой возврата 'all'
Success: all
но на основной запрос теперь выдает просто
Success:
Т.е. не ошибка, но массив не сформировался? Как понимать, что result пустой? json_encode в php точно не мешает?

2. для чистоты эксперимента вернул dataType
для id_tec == 0
textStatus: parsererror
error: SyntaxError: Недопустимый знак
а тут sql-запрос
textStatus: parsererror
error: SyntaxError: Синтаксическая ошибка
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 11:24 4
На 31й строке:
PHP
1
if ($odbc_result) {
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 11:32  [ТС] 5
Цитата Сообщение от Balanaar Посмотреть сообщение
На 31й строке:
PHP
1
if ($odbc_result) {
это, извиняюсь, я кусок лишний затер. Скобка есть на самом деле, закрывается на 41 строке
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 11:36 6
leech, будете скрывать куски кода - ошибку можем не найти.
Добавьте следующие строки в начало вашего php-скрипта и покажите результат:
PHP
1
2
3
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 12:16  [ТС] 7
еще раз извиняюсь - комментарий стер вместе со скобкой. Сам код оставил, как есть

не очень понял в какой именно скрипт эти строки вставить. Если в рассматриваемый sqlQuery.php, то результат не изменился. Ни в логах, ни на странице ничего не произошло нового. В стартовый index.php вставил, выдало в хедере вот такое:
Notice: Undefined variable: last_update in D:\inetpub\saradm-hpf-test.ad.ies-
но, если я правильно понимаю, это с логотипом связано и к нашему вопросу отношения не имеет
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 12:31 8
leech, если вы стёрли dataType и результат не изменился, значит серверных ошибок нет.
Теперь вставьте в конец вашего php-скрипта sqlQuery.php следующую строку:
PHP
1
echo odbc_errormsg();
И покажите результат
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 13:59  [ТС] 9
опять же просто Success: в логах
в общем без изменений. И в конец вставлял и вместо echo json_encode

вообще, может лучше вернуть dataType? основная часть все таки у меня из запроса идет и вернуть мне именно массив нужно, а 'all' - частный случай, который потом обыграю?
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 15:47 10
leech, тогда ваш запрос просто ничего не возвращает. Других вариантов я не вижу.
Цитата Сообщение от leech Посмотреть сообщение
может лучше вернуть dataType?
А вы понимаете хотя бы зачем нужен этот параметр?
Если вы всё-таки вставите его со значением json, то к ответу от сервера будет автоматически применена функция JSON.parse(). В случае, если ответом от сервера будет невалидная JSON-строка, то скрипт выдаст критическую ошибку и остановит работу.
Приведите структуру ответа вашего сервера к единому формату. Тогда уже можете играться и с типом данных.

Добавлено через 18 минут
Имеется в виду, что ваш SQL-запрос ничего не возвращает. Тщательно проверьте ваш запрос на корректность. Многократно.
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 16:42  [ТС] 11
так в том и проблема, что уже кончились идеи, что именно проверять
вот этот запрос из менеджмент студии и ниже результат.
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT gftec.[Id]
      ,gftec.[ID_TEC]
      ,gftec.[dattime]
      ,gftec.[p]
      ,gftec.[t]
      ,gftec.[q]
      ,gftec.[tabl]
      ,Device.[ID] AS "ID_dev"
      ,Device.[Name]
      ,Device.[OrderNum]
      ,Device.[IdDataType]
      FROM (
        SELECT * FROM gftec WHERE [ID_TEC]=6) AS gftec JOIN (
        SELECT * FROM Device WHERE [Id_tec]=6) AS device ON gftec.[tabl]=device.[ID]
      WHERE gftec.[Id] IN (SELECT MAX(Id) FROM gftec
                                                                  WHERE gftec.[ID_TEC]=6
                                                                  GROUP BY gftec.[tabl])
      ORDER BY device.[OrderNum]
IdID_TECdattimeptqtablID_devNameOrderNumIdDataType
20884847062017-01-09 23:15:00.0008,018487811869,67004455Прямая Т.С11
20884846262017-01-09 23:16:00.0001,738052521887,81579644Обратная Т.С21
20884846562017-01-09 23:16:00.0001,84355285033Подпитка Т.С31
20884846762017-01-09 23:16:00.000-0,18861916066Пром.вода41
20884846962017-01-09 23:15:00.0004,247477-110809,72265611Пром. ввод газа42
20884846862017-01-09 23:16:00.0004,451854-3022Гор.ввод газа52

все ок (год не смотрим - это тестовая база)

Теперь я этот запрос копирую в php, оставив значения в явном виде, а не переменные
Синтаксис проверил: все в двойных кавычках, внутри запроса двойные на одинарные заменил, ';' не забыл...
textStatus: parsererror
error: SyntaxError: Синтаксическая ошибка
и не пойму в каком синтаксисе ошибка. Т.е. php хочет от этого запроса чего-то большего/другого...

а насчет валидности, ну как-то так например (строка 7)
PHP
1
2
3
4
if ($id_tec == 0) { 
  echo json_encode(array("c" => "all"));
  exit();
}
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
02.10.2018, 16:56 12
А во вкладке Network (Сеть) в консоли разработчика в браузере смотрели, что вообще от сервера приходит на ваш запрос?
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
02.10.2018, 19:41  [ТС] 13
ИмяПротоколМетодРезультатТип содержимогоПолученоВремяИнициатор
http://saradm-hpf-test.ad.ies-.../ph...evice_id=99999HTTPGET200text/html0 B4,86 сXMLHttpRequest
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
04.10.2018, 16:36  [ТС] 14
Цитата Сообщение от Balanaar Посмотреть сообщение
Во-первых, вы ожидаете на выходе данные в формате JSON, а ваш скрипт в некоторых случаях может вернуть обычный текст.
,[/JS]
Посмотрим, что там у вас.
помогите с этой темой разобраться по-лучше!

ошибка выскакивает в строке php
PHP
1
echo json_encode(array('c' => $device_count, 'd_name' => $res_d_name, 'p' => $res_p, 't' => $res_t, 'q' => $res_q, 'dattime' => $res_dattime));
как только я убираю d_name из массива, сразу ajax перестает ругаться!
Но это как раз то, ради чего я перелопатил работающий запрос. Именно ради добавления этого d_name...
в самом массиве (выводил через print_r) все данные отлично выглядят.
Можете объяснить, почему так происходит? Ведь дата - это тоже отдельный формат. Ее пропускает, а на названиях (строка) затыкается
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
04.10.2018, 17:28 15
Цитата Сообщение от leech Посмотреть сообщение
Можете объяснить, почему так происходит?
Не могу без текста ошибки и значения переменной $res_d_name
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
04.10.2018, 19:03  [ТС] 16
Цитата Сообщение от Balanaar Посмотреть сообщение
Не могу без текста ошибки и значения переменной $res_d_name
вот весь получившийся массив, в том числе d_name
Array ( [c] => 6 [d_name] => Array ( [0] => Прямая Т.С [1] => Обратная Т.С [2] => Подпитка Т.С [3] => Пром.вода [4] => Пром. ввод газа [5] => Гор.ввод газа ) [p] => Array ( [0] => 8.0184870000000004 [1] => 1.7380519999999999 [2] => 1.8435520000000001 [3] => -0.18861900000000001 [4] => 4.2474769999999999 [5] => 4.451854 ) [t] => Array ( [0] => 81.0 [1] => 52.0 [2] => 85.0 [3] => 16.0 [4] => -1.0 [5] => -3.0 ) [q] => Array ( [0] => 1869.670044 [1] => 1887.8157960000001 [2] => 0.0 [3] => 0.0 [4] => 10809.722656 [5] => 0.0 ) [dattime] => Array ( [0] => 09:01:2017 11:15:00 [1] => 09:01:2017 11:16:00 [2] => 09:01:2017 11:16:00 [3] => 09:01:2017 11:16:00 [4] => 09:01:2017 11:15:00 [5] => 09:01:2017 11:16:00 ) )
а ошибка все та же
textStatus: parsererror
error: SyntaxError: Синтаксическая ошибка
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
05.10.2018, 09:25 17
Подставьте в ваш код данные в явном виде. Ошибка будет?
PHP
1
echo json_encode( Array ( 'c' => 6, 'd_name' => Array ( 'Прямая Т.С', 'Обратная Т.С', 'Подпитка Т.С', 'Пром.вода', 'Пром. ввод газа', 'Гор.ввод газа' ), 'p' => Array ( 8.0184870000000004, 1.7380519999999999, 1.8435520000000001, -0.18861900000000001, 4.2474769999999999, 4.451854 ), 't' => Array ( 81.0, 52.0, 85.0, 16.0, -1.0, -3.0 ), 'q' => Array ( 1869.670044, 1887.8157960000001, 0.0, 0.0, 10809.722656, 0.0 ), 'dattime' => Array ( '09:01:2017 11:15:00', '09:01:2017 11:16:00', '09:01:2017 11:16:00', '09:01:2017 11:16:00', '09:01:2017 11:15:00', '09:01:2017 11:16:00' ) ) );
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
05.10.2018, 11:08  [ТС] 18
Цитата Сообщение от Balanaar Посмотреть сообщение
Подставьте в ваш код данные в явном виде. Ошибка будет?
PHP
1
echo json_encode( Array ( 'c' => 6, 'd_name' => Array ( 'Прямая Т.С', 'Обратная Т.С', 'Подпитка Т.С', 'Пром.вода', 'Пром. ввод газа', 'Гор.ввод газа' ), 'p' => Array ( 8.0184870000000004, 1.7380519999999999, 1.8435520000000001, -0.18861900000000001, 4.2474769999999999, 4.451854 ), 't' => Array ( 81.0, 52.0, 85.0, 16.0, -1.0, -3.0 ), 'q' => Array ( 1869.670044, 1887.8157960000001, 0.0, 0.0, 10809.722656, 0.0 ), 'dattime' => Array ( '09:01:2017 11:15:00', '09:01:2017 11:16:00', '09:01:2017 11:16:00', '09:01:2017 11:16:00', '09:01:2017 11:15:00', '09:01:2017 11:16:00' ) ) );
нет ошибки. Вот как-то так:
Success: {"c":6,"d_name":["\u041f\u0440\u044f\u043c\u0430\u044f \u0422.\u0421","\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0422.\u0421","\u041f\u043e\u0434\u043f\u0438\u0442\u043a\u0430 \u0422.\u0421","\u041f\u0440\u043e\u043c.\u0432\u043e\u0434\u0430","\u041f\u0440\u043e\u043c. \u0432\u0432\u043e\u0434 \u0433\u0430\u0437\u0430","\u0413\u043e\u0440.\u0432\u0432\u043e\u0434 \u0433\u0430\u0437\u0430"],"p":[8.018487,1.738052,1.843552,-0.188619,4.247477,4.451854],"t":[81,52,85,16,-1,-3],"q":[1869.670044,1887.815796,0,0,10809.722656,0],"dattime":["09:01:2017 11:15:00","09:01:2017 11:16:00","09:01:2017 11:16:00","09:01:2017 11:16:00","09:01:2017 11:15:00","09:01:2017 11:16:00"]}
0
Balanaar
926 / 795 / 383
Регистрация: 11.07.2016
Сообщений: 2,343
05.10.2018, 11:47 19
Лаааадно... тогда сделайте так:
PHP
1
var_dump(array('c' => $device_count, 'd_name' => $res_d_name, 'p' => $res_p, 't' => $res_t, 'q' => $res_q, 'dattime' => $res_dattime));
И скопируйте результат
0
leech
1 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 40
08.10.2018, 07:56  [ТС] 20
Цитата Сообщение от Balanaar Посмотреть сообщение
Лаааадно... тогда сделайте так:
PHP
1
var_dump(array('c' => $device_count, 'd_name' => $res_d_name, 'p' => $res_p, 't' => $res_t, 'q' => $res_q, 'dattime' => $res_dattime));
И скопируйте результат
cделано
array(6) {["c"]=>int(6)["d_name"]=>array(6) {[0]=>string(10) "Прямая Т.С"[1]=>string(12) "Обратная Т.С"[2]=>string(12) "Подпитка Т.С"[3]=>string(9) "Пром.вода"[4]=>string(15) "Пром. ввод газа"[5]=>string(13) "Гор.ввод газа"}["p"]=>array(6) {[0]=>string(18) "8.0184870000000004"[1]=>string(18) "1.7380519999999999"[2]=>string(18) "1.8435520000000001"[3]=>string(20) "-0.18861900000000001"[4]=>string(18) "4.2474769999999999"[5]=>string(8) "4.451854"}["t"]=>array(6) {[0]=>string(4) "81.0"[1]=>string(4) "52.0"[2]=>string(4) "85.0"[3]=>string(4) "16.0"[4]=>string(4) "-1.0"[5]=>string(4) "-3.0"}["q"]=>array(6) {[0]=>string(11) "1869.670044"[1]=>string(18) "1887.8157960000001"[2]=>string(3) "0.0"[3]=>string(3) "0.0"[4]=>string(12) "10809.722656"[5]=>string(3) "0.0"}["dattime"]=>array(6) {[0]=>string(19) "09:01:2017 11:15:00"[1]=>string(19) "09:01:2017 11:16:00"[2]=>string(19) "09:01:2017 11:16:00"[3]=>string(19) "09:01:2017 11:16:00"[4]=>string(19) "09:01:2017 11:15:00"[5]=>string(19) "09:01:2017 11:16:00"} }
да что же не так с этим d-name'ом??? Не пойму чем он такой особенный
0
08.10.2018, 07:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2018, 07:56

AJAX вместо результата обработчика возвращает, исходный код обработчика
Здравствуйте, начал изучать AJAX и столкнулся с проблемой, при GET запросе в котором я стучу в файл...

AJAX запрос к облачной БД
Помогите с заданием. Необходимо создать три AJAX запроса: чтение, запись и удаление к облачной БД....

AJAX запрос с авторизацией
Доброго всем! Пытаюсь получить данные с сайта, на котором не зарегистрирован, но есть токен. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru