.execute () под капотом делает команды подготовки + выполнения
запрос против выполнения шаг за шагом:
запрос:
формат sql на клиенте: 'ВЫБЕРИТЕ id ИЗ mytable WHERE ID IN (?)' + [
[1,2,3]] становится «SELECT id From mytable WHERE id IN (1, 2, 3)» send
Команда COM_QUERY с «SELECT id FROM mytable WHERE id IN (1, 2, 3)»
Выполнить чтение полей + строк:
отправить команду COM_PREPARE с идентификатором SELECT FROM mytable WHERE id IN (?)
в качестве параметра запроса прочитайте подготовленный результат оператора (id + параметры +
поля результата, если известны из запроса). Для этого запроса есть один
параметр (один?). id это число, обычно начинается с 1 для каждого
соединение (не уникально для сервера, вы не можете подготовить заявление в
одно соединение и использование в другом) отправьте команду COM_EXECUTE, используя
идентификатор оператора + параметры. Параметры должны быть простыми типами mysql, и
в настоящее время все параметры приводятся к строкам и сериализуются как строки
(за исключением параметров Buffer, они отправляются как есть). В вашем
Например, "пожалуйста, выполните stmt с идентификатором 1 и одним параметром, который является
строка "1,2,3" Результат из подготовительного шага выше кэшируется, а следующий
выполнять команды только с одним запросом 'COM_EXECUTE' часть выполнена
Я согласен, что это сбивает с толку, но это как подготовленное заявление
Работа. Мы должны улучшить это с помощью лучшей документации и, возможно, некоторых
предупреждения / ошибки проверки параметров типа _ "эй, вы уверены, что хотите
отправить параметр {foo: 'bar'} в подготовленный оператор? Это будет
отправлено как [объект объекта]! ''