За последние 24 часа нас посетили 22893 программиста и 1266 роботов. Сейчас ищут 683 программиста ...

Ошибка в SQL запросе

Тема в разделе "PHP для новичков", создана пользователем Reken, 1 дек 2020.

Метки:
  1. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Помогите пожалуйста, исправить ошибку

    Вводные данные
    Код (Text):
    1. $institutions # Это массив полученный через POST
    2. $month        # Это массив полученный через POST
    3.  
    4. $users = implode(",",$institutions);
    5. $list = implode(",",$month);
    6.  
    7. $query ="SELECT user_name, heat, SUM(volume1), SUM(cost1), water_disposal, SUM(volume2), SUM(cost2), water_supply, SUM(volume3), SUM(cost3), electro, SUM(volume4), SUM(cost4), garbage, SUM(volume5), SUM(cost5), disposal, SUM(volume6), SUM(cost6), SUM(total) FROM `$year` WHERE month IN($list) AND `user_name` IN($users) AND `group` = '$value' GROUP BY user_name";
    При выполнении скрипта вижу ошибку:
    Код (Text):
    1. Warning: Invalid argument supplied for foreach() in /usr/local/www/portal/construct_table.php on line 193
    2. ERORRRR You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND `user_name` IN()' at line 1
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    ну если прочесть ошибку - видно ж что в user_name IN () пусто! а нельзя так в IN
     
  3. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Понял, спасибо.
    Значит POST не передал массив, попробую исправить
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    если значения перечисляешь не с числовым типом, то удачи (нет) апострофы в помощь.
     
  5. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    А можно пожалуйста подробнее по поводу апострофы? Оператор IN () работает только с числами?

    У меня как раз сейчас проблема, может с этим и связана?

    Выполняю код, для вывода таблицы:
    Код (Text):
    1. $query ="SELECT * FROM `$year` WHERE `user_name` IN('$users') AND `group` = 'A'";
    Если массив $users содержит одно название внутри, то таблица успешно отображается
    Но если внутри массива 2 названия учреждений, то таблица выходит пустая...Хотя должна показать два учреждения...

    Если я непонятно объяснил скажите, я объясню более понятно...
    Почему оператор IN () некорректно работает если значение не числовое?
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Reken, осознали, что надо получить не строку 'x,y', а строку 'x','y'?
    Если да, то должно придти понимание, что первый аргумент функции implode() должен быть несколько другим.
     
  7. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Спасибо, осознание пришло...
    Код (Text):
    1. $users = implode("','",$institutions);
    Теперь скрипт отрабатывает должным образом