Как связать параметры несколько раз дважды [дублировать]

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Я также новичок в Android, поэтому я могу ошибаться. Но согласно моему пониманию, используя это для создания списка, второй аргумент - это расположение элементов списка. Макет состоит из множества видов (вид изображения, текстовое представление и т. Д.). С третьим аргументом вы указываете, в каком представлении или текстовом режиме вы хотите, чтобы текст отображался.

19
задан j0k 3 September 2012 в 22:12
поделиться

3 ответа

PDO :: prepare заявляет, что «вы не можете использовать маркер именованного параметра с тем же именем дважды в подготовленном заявлении», поэтому я предполагаю, что это не так.

18
ответ дан IMSoP 19 August 2018 в 13:24
поделиться
  • 1
    Документы не совсем корректны. Если PDO::ATTR_EMULATE_PREPARES является true, PDO DOES поддерживает повторное использование именованных параметров маркеров. – Mike 12 February 2014 в 09:02
  • 2
    Похоже, кто-то обновил документы. Теперь вы говорите: «Вы не можете использовать один и тот же параметр маркера одного и того же имени более одного раза в подготовленном заявлении, если не включен режим эмуляции. & Quot; – Mike 22 April 2014 в 22:57
  • 3
    Вы частично правы. Однако SELECT :Param невозможно, поскольку вы не можете привязывать таблицы / столбцы. Проверьте stackoverflow.com/q/182287 – Funk Forty Niner 13 December 2014 в 18:56

Помимо повторного использования, основная проблема здесь заключается в том, что вы пытаетесь динамически изменять имена col.

Этот ответ отправлен анонимным пользователем в http://php.net/manual/en/pdo.prepare.php :

Тем, кто задается вопросом, почему добавление котировок вокруг заполнителя неверно и почему вы не можете использовать заполнители для имен таблиц или столбцов:

Существует распространенное заблуждение о том, как работают заполнители в подготовленных операциях: они не просто заменяемые в (экранированные) строки, и полученный SQL-код выполняется. Вместо этого СУБД, попросившая «подготовить» заявление, содержит полный план запросов о том, как он будет выполнять этот запрос, включая те таблицы и индексы, которые он будет использовать, которые будут одинаковыми независимо от того, как вы заполняете заполнители.

План «SELECT name FROM my_table WHERE id =: value» будет таким же, как вы заменяете «: значение», но похожее «SELECT name FROM: table WHERE id =: value» не может планировать, потому что СУБД не знает, какую таблицу вы собираетесь выбрать.

Даже при использовании «эмулированных подготавливаний» PDO не может позволить вам использовать местозаполнители где угодно, потому что ему придется работать что вы имели в виду: «Выберите: foo From some_table» означает «: foo» будет ссылкой на столбец или литеральной строкой?

Когда ваш запрос использует ссылку динамической колонки , вы должны быть явно белыми - перечисление столбцов, которые, как вы знаете, существуют в таблице, например используя оператор switch с исключением, созданным в предложении по умолчанию:

1
ответ дан frostymarvelous 19 August 2018 в 13:24
поделиться

Вы можете установить PDO::ATTR_EMULATE_PREPARES = true.

Например. $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);.

Если вы используете Laravel, вы можете установить это в массиве options в config/database.php. например PDO::ATTR_EMULATE_PREPARES => true

2
ответ дан Jonathan 19 August 2018 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: