различать пользовательские данные от имен параметров в запросе с заполнителями - PullRequest
0 голосов
/ 06 ноября 2011

Я использую класс для создания запроса MySQL с именованными параметрами для привязки к нему данных.Пример запроса может быть следующим:

INSERT INTO table (title, text) VALUES (?title, ?text)

Теперь вы можете указать значения, которые будут использоваться для этих заполнителей (?title, ?text), указав имя параметра и значение.В этом процессе значение будет экранировано (в основном mysql_real_escape_string со специальными обработками для логических значений, массивов и т. Д.).

Проблема заключается в значении, которое содержит сами заполнители, поскольку я заменяю их последовательно.Для завершения приведенного выше примера замены могут быть следующими:

title -> "hey ?text"
text -> "lorem ipsum ..."

Мои первые мысли - сначала заменить заполнители уникальными значениями.Это должны быть строки, которые не могут встречаться в экранированных строках.

Это хороший способ и какие последовательности символов существуют для этой цели?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Я верю, что вся ваша концепция неверна.
Вы смешиваете вещи.

Заполнитель должен использоваться только для добавления значения в запрос. НЕ создавать причудливый синтаксис.

Ничто не мешает тебе делать что-то вроде

$ text = "lorem ipsum ..."; $ title = "hey $ text";

так что готовьте свои переменные таким образом. и только потом ставить их в запрос.

Тем не менее, я могу упустить какой-то разумный вопрос. Если у вас есть веские аргументы, я постараюсь найти решение для вас

Что касается вопроса в вашем названии, я просто сбежал? с другим ?? в моем заполнителе парсера.

0 голосов
/ 06 ноября 2011

Взгляните на использование mysqli_prepare () с mysqli_stmt_bind_param () .

Что вам нужно сделать, это взять существующие именованные параметры и заменить их натолько вопросительные знаки.Когда вы последовательно извлекаете именованные параметры из строки запроса, вы будете создавать упорядоченный массив, который вы будете использовать в вашей функции mysqli_stmt_bind_param(), и поместите соответствующее значение из массива значений.После того, как упорядоченный массив будет создан, вам нужно будет выполнить итерацию по нему и выполнить проверки типов, чтобы вы могли передать значение $types в mysqli_stmt_bind_param().

Я настоятельно рекомендую вам воспользоватьсярассмотрим использование библиотеки типа PDO вместо собственной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...