PDO обязательные значения для оператора MySQL IN

Кажется необходимостью в некоторых основных объяснениях о чем-то, что, к сожалению, даже большинство программистов не понимает правильно.

Файлы как Ваша страница HTML сохранены и переданы по Интернету как последовательность байтов, но Вы хотите их отображенный как символы. Для перевода байтов в символы Вам нужен ряд правил, названный кодировка символов . К сожалению, существует много различных кодировок символов, которые исторически появились для обработки различных языков. Большинство из них основано на американце кодирование ASCII, но как только у Вас есть символы за пределами ASCII такой как немецкие умляуты , необходимо быть очень осторожными, о котором кодировании Вас используют.

источник Вашей проблемы - то, что для корректного декодирования файла HTML, браузер должен знать который кодирование использовать. Можно сказать его так несколькими способами:

, Таким образом, Вы должны к [1 116] выбрать кодирование того, сохраните файл HTML с помощью того кодирования и удостоверьтесь, что Вы объявляете, что кодирование по крайней мере одним из способов упомянуло выше (и если Вы используете, больше чем один убеждает чертовски, они соглашаются). Что касается какой, кодируя для использования немцы обычно используют ISO/IEC 8859-15, но UTF-8 является хорошей альтернативой, которая может обработать любой вид символов неASCII одновременно.

71
задан Dominique 5 October 2015 в 11:11
поделиться

2 ответа

This is the same thing as was asked in this question: Can I bind an array to an IN() condition?

The answer there was that, for a variable sized list in the in clause, you'll need to construct the query yourself.

However, you can use the quoted, comma-separated list using find_in_set, though for large data sets, this would have considerable performance impact, since every value in the table has to be cast to a char type.

For example:

select users.id
from users
join products
on products.user_id = users.id
where find_in_set(cast(products.id as char), :products)

Or, as a third option, you could create a user defined function that splits the comma-separated list for you (cf. http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids/). This is probably the best option of the three, especially if you have a lot of queries that rely on in(...) clauses.

38
ответ дан 24 November 2019 в 13:07
поделиться

The best prepared statement you could probably come up with in a situation like this is something resembling the following:

SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (?,?,?,?,?,?,?,?)

You would then loop through your values and bind them to the prepared statement making sure that there are the same number of question marks as values you are binding.

8
ответ дан 24 November 2019 в 13:07
поделиться
Другие вопросы по тегам:

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