All streams
Search
Write a publication
Pull to refresh
44
0
sectus @sectus

User

Send message
> execute экранирует все переменные, поэтому такой код с mysql выражением у вас не сработает:

Не экранирует ничего execute… Если СУБД поддерживает подготовленные выражения, то ничего никто не экранирует, а данные идут в базу отдельным пакетом. Если СУБД не поддерживает подготовленные выражения, то их эмулирует соответствующий драйвер(экранирует, кодирует — не важно). Если мы говорим про mysql, то используются именно полноценные подготовленные выражения. Вот пример:
# mysql
mysql> PREPARE stmt1 FROM 'SELECT ? AS `title`';
mysql> set @title = "--''''''''!@#$%^&*()_+////\"\\";
mysql> EXECUTE stmt1 USING @title;
+------------------------------+
| title |
+------------------------------+
| --''''''''!@#$%^&*()_+////"\ |
+------------------------------+
1 row in set (0.00 sec)


На всякий случай ссылка. Данные не экранировались, а вставились в запрос как есть.
Вы можете его сами прекрасно написать. Зачем Вам нужно, чтобы это сделал я? Поясните свою мысль без выходов из-за печки.
Да, внешнее состояние объекта (значение полей таблицы базы данных) вынесено в массив, который перебирается. И данные в объект попадают только тогда когда нужна конкретная запись. Внутреннее состояние остаётся неизменным (таблица, список полей).
Тоже пользуюсь примерно таким же способом. В цикле перебирается массив записей внутри объекта, в результате каждый раз выдаётся один и тот же объект только с разными значениями в полях.

Кстати, это шаблон Приспособленец.
> execute экранирует все переменные
Классическая ошибка или непонимание подготовленных выражений.
Если использовать аргумент «Скорость еп*та», то можно под эту гребёнку многое чего подвести: $i++ губительно для хайлоада, echo $i.$k губительно для хайлоада, echo «текст» губительно для хайлоада и т.п.

Аргумент может быть, например, такими: «проект выдерживал только 1000 запросов в минуту, после перевода с PDO на MySql стал держать 10000», или, например, таким: «при использовании PDO, где на странице выполняется 20 запросов к базе снижает скорость выполнения в 1.5 раза по сравнению с MySQL» и т.д.
> PDO губительно для хайлоада
> Только в самых минимальных ее проявлениях.

Аргументы?
> ORM же замкнуты сами на себя.
Поясните, пожалуйста.
Дело совсем не в этом. Вы же можете создать подготовленное выражение и использовать его несколько раз подставляя в него разные значения. При этом каждый раз посылая новые значения вы не отправляете сам запрос и, соответственно, mysql не парсит этот запрос заново. Но это только в пределах одного соединения. А наступает новое соединение и этот запрос отправляется заново и парсится заново…
Хороший вопрос. Буржуйский сайт нам подсказывает ответ. Если коротко, то нельзя сохранять выражения и использовать их между соединениями.
Если сравнивать, то с чем?
Вы обращаетесь к автору или к переводчику?
Я не думаю, что библиотека для PHP4 (даже, если работающая в PHP5...) сейчас будет использоваться для нового проекта… тем более, что используется устаревшее расширение mysql_ (и как следствие используются не подготовленные выражения, а только их эмуляция). И кто-то спустил собак на этот код.
> Использование prepared statements укрепляет защиту от SQL-инъекций.

Я хочу прояснить вот такой вопрос: если всегда для всех параметров использовать подготовленные выражения, то можно ли сказать, что я защищён от инъекций полностью? Не берём в расчёт драйвера, которые только имитируют работу с подготовленными выражениями. Чего стоит опасаться в таком случае?
Тем, что он там не используется.
Ну… можно было предположить, что g равны в обеих системах и вычислить сколько метров в одном блоке.: )

Information

Rating
Does not participate
Location
Иркутск, Иркутская обл., Россия
Registered
Activity