Посоны, почему у меня всегда возникают проблемы с такой записью после фигурной скобки? Если я вставил в запрос какую-то переменную в фигурных скобках, то все поля дальше подсвечиваются серым, как будто шторм не видит их в этой таблице. И авто-подстановка перестаёт работать на Ctrl+пробел. Что не нравится шторму?
по хорошему ты присваиваешь полю loan_id строку {$row[ и дальше у тебя одинарная кавычка, так что надо двойную кавычку использовать вокруг id но видимо бэкслешить эту двойную кавычку необходимо \"id\"
@username Не, не прокатило. Фигурные скобки это и есть экранирование, как я понимаю. Внутри можно использовать двойные кавычки, их не надо экранировать и это никак не ломает SQL-запрос. То бишь, можно писать вот так: Но поля в запросе дальше всё-равно серые. Шторму не нравятся именно фигурные скобки почему-то.
Единственное что я нашёл в гугле это вот: https://drupal.stackexchange.com/qu...phpstorm-to-recognise-drupal-table-sql-syntax Но это решение не работает для массивов или переменных, вставленных в SQL с фигурными скобками. И кстати, если разрывать SQL-строку через двойные кавычки, то происходит тоже самое. А если просто вставить переменную, то всё нормально.
В SQL-строку нельзя вставлять массивы, только если экранируешь фигурными скобками. Для этого я их и использую. Мне такая запись: PHP: "`name`='{$row['name']}', `sname`='{$row['sname']}'" нравится куда больше, чем: PHP: "`name`='".$row['name']."', `sname`='".$row['sname']."'" Тут месево из одинарных и двойных кавычек просто, ещё и точки появляются. Хотя, что первый способ, что второй ломают подсветку полей в SQL-строке.
@NerdRage, ну возможно такой глюк у шторма. А вообще, фигурные скобки ничего не экранируют, просто позволяют использовать внутри строк более сложные выражения. От SQL-инъекций не спасают, так что твой код уязвим. Переходи на регулярные выражения или норм. фреймворки, которые автоматом экранируют.
Какой-то странный вопрос. $row это массив, $row['id'] это целое число. Ты вот это видишь? Шторм ругается, если не оборачивать фигурными скобками или в ".$row['id']." И вылазит ошибка такая: 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.
Еееееетить... вся моя жизнь была ложью. Это работает. В PHP же нельзя писать без скобок, выдаёт вполне логичную ошибку про незадефайненную константу. А в MySQL оно работает. Вопрос только в том, так писать в SQL нормально вообще или это быдлокод? Может там проблемы какие-то могут всплыть на Линухах или если в конфиге php.ini что-то не включено?
наконец дошло, аргументировать не люблю. нет , таков синтаксис пхп, но уязвимость данных никуда не делась --- Добавлено --- " - мистика
Ппц это странное открытие для меня. PHP при таком написании воспринимает ключ не как строку, а как константу. Что логично, и на это он выдаёт логичную ошибку, мол константа не определена. А SQL воспринимает такой ключ без кавычек как строку... А как быть, если я хочу воткнуть в SQL-запрос константу? Например так: Тут уже только разрывать через ".$row[FIELD_NAME]." ? В примере со скрина выше, запрос уходит в таком виде: PHP: 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
константы тут не причем, когда ты со строкой в двойных кавычках робишь --- Добавлено --- Как будто ты сегодня начал изучать программирование. в Запрос надо данные в контейнер засовывать '
@NerdRage, когда ты подставляешь переменную в любую строку, не только в SQL, то индексы в кавычках писать не обязательно. Это основы PHP, вообще то. PHP: $a = ["vasya" => "horoshiy malchik"]; echo "Something about vasya $a[vasya]"; А вот константы внутри строк не раскрываются.
Препод был тупой, часто вообще не приезжал на занятия и проверял лабы всего пару раз. Так что я самоучка, мои основы это Евгений Попов. Спасибо за пояснение, буду выкидывать все кавычки и фигурные скобки из кода.