За последние 24 часа нас посетили 46911 программистов и 11751 робот. Сейчас ищут 1414 программистов ...

PHPStorm и MySQL

Тема в разделе "IDE", создана пользователем NerdRage, 18 окт 2018.

  1. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Посоны, почему у меня всегда возникают проблемы с такой записью после фигурной скобки? Если я вставил в запрос какую-то переменную в фигурных скобках, то все поля дальше подсвечиваются серым, как будто шторм не видит их в этой таблице. И авто-подстановка перестаёт работать на Ctrl+пробел. Что не нравится шторму?

    [​IMG]
     
  2. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    223
    Симпатии:
    17
    по хорошему ты присваиваешь полю loan_id строку {$row[
    и дальше у тебя одинарная кавычка, так что надо двойную кавычку использовать вокруг id
    но видимо бэкслешить эту двойную кавычку необходимо \"id\"
     
  3. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    @username Не, не прокатило. Фигурные скобки это и есть экранирование, как я понимаю. Внутри можно использовать двойные кавычки, их не надо экранировать и это никак не ломает SQL-запрос. То бишь, можно писать вот так:

    [​IMG]

    Но поля в запросе дальше всё-равно серые. Шторму не нравятся именно фигурные скобки почему-то.
     
  4. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Единственное что я нашёл в гугле это вот: https://drupal.stackexchange.com/qu...phpstorm-to-recognise-drupal-table-sql-syntax
    Но это решение не работает для массивов или переменных, вставленных в SQL с фигурными скобками. И кстати, если разрывать SQL-строку через двойные кавычки, то происходит тоже самое. А если просто вставить переменную, то всё нормально.

    [​IMG]
     
    #4 NerdRage, 18 окт 2018
    Последнее редактирование: 18 окт 2018
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. `load_id` = $row[id]
     
  6. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    В SQL-строку нельзя вставлять массивы, только если экранируешь фигурными скобками. Для этого я их и использую. Мне такая запись:
    PHP:
    1. "`name`='{$row['name']}', `sname`='{$row['sname']}'"
    нравится куда больше, чем:
    PHP:
    1. "`name`='".$row['name']."', `sname`='".$row['sname']."'"
    Тут месево из одинарных и двойных кавычек просто, ещё и точки появляются. Хотя, что первый способ, что второй ломают подсветку полей в SQL-строке.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    @NerdRage у тебя в row[id] находится массив ?
    ты ничего не пил ?
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @NerdRage, ну возможно такой глюк у шторма. А вообще, фигурные скобки ничего не экранируют, просто позволяют использовать внутри строк более сложные выражения. От SQL-инъекций не спасают, так что твой код уязвим. Переходи на регулярные выражения или норм. фреймворки, которые автоматом экранируют.
     
  9. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Какой-то странный вопрос. $row это массив, $row['id'] это целое число.
    Ты вот это видишь? Шторм ругается, если не оборачивать фигурными скобками или в ".$row['id']."
    [​IMG]
    И вылазит ошибка такая:
    Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\my_path\functions.php on line 481

    Чувак, тут вообще вопрос не про то экранирование. И не про экранирование вовсе, а про поведение шторма. Я знаю как использовать mysqli_real_escape_string.
     
    #9 NerdRage, 3 ноя 2018
    Последнее редактирование: 3 ноя 2018
  10. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Еееееетить... вся моя жизнь была ложью. Это работает. В PHP же нельзя писать без скобок, выдаёт вполне логичную ошибку про незадефайненную константу. А в MySQL оно работает. Вопрос только в том, так писать в SQL нормально вообще или это быдлокод? Может там проблемы какие-то могут всплыть на Линухах или если в конфиге php.ini что-то не включено?

    [​IMG]
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    наконец дошло, аргументировать не люблю.
    нет , таков синтаксис пхп, но уязвимость данных никуда не делась
    --- Добавлено ---
    " - мистика
     
  12. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Ппц это странное открытие для меня. PHP при таком написании воспринимает ключ не как строку, а как константу. Что логично, и на это он выдаёт логичную ошибку, мол константа не определена. А SQL воспринимает такой ключ без кавычек как строку... А как быть, если я хочу воткнуть в SQL-запрос константу? Например так:

    [​IMG]

    Тут уже только разрывать через ".$row[FIELD_NAME]." ? В примере со скрина выше, запрос уходит в таком виде:
    PHP:
    1. SELECT * FROM `wp_loans` WHERE `id`= AND `loan_type`=4
    И выдаёт ошибку:
    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 `loan_type`=4' at line 1
     
    #12 NerdRage, 3 ноя 2018
    Последнее редактирование: 3 ноя 2018
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    константы тут не причем, когда ты со строкой в двойных кавычках робишь
    --- Добавлено ---
    Как будто ты сегодня начал изучать программирование. в Запрос надо данные в контейнер засовывать '
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @NerdRage, когда ты подставляешь переменную в любую строку, не только в SQL, то индексы в кавычках писать не обязательно. Это основы PHP, вообще то.
    PHP:
    1. $a = ["vasya" => "horoshiy malchik"];
    2.  
    3. echo "Something about vasya $a[vasya]";
    А вот константы внутри строк не раскрываются.
     
    NerdRage нравится это.
  15. NerdRage

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

    С нами с:
    6 июл 2016
    Сообщения:
    439
    Симпатии:
    42
    Препод был тупой, часто вообще не приезжал на занятия и проверял лабы всего пару раз. Так что я самоучка, мои основы это Евгений Попов. Спасибо за пояснение, буду выкидывать все кавычки и фигурные скобки из кода.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726