Различия между использованием? и: параметр в подготовить заявление

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

вопросительные знаки

$id = 30;
$q = $conn->prepare("SELECT * FROM pdo_db WHERE id > ?");
$q->execute(array($id));  // Here above ID will be passed

именованные параметры

$sth = $conn->prepare("SELECT `id`, `title` FROM `pdo_db` WHERE `id` > :id");
$sth->execute(array(
':id' => 30
));

Оба работают нормально и дают точные результаты, но я не могу получить точные различия между этими двумя, ни когда я должен использовать тот или иной?

9

Решение

Параметры вопросительного знака называются позиционный параметры.

Параметры, определенные с : и имя называются названный параметры.

Правило состоит в том, что вы не можете смешать два в своем подготовленном утверждении.

Позиционные параметры работают простым способом — если у вас есть два позиционных параметра, вы можете указать массив с двумя элементами. Значения массива будут связаны в порядке их появления в массиве.

Именованные параметры немного сложнее, они не должны быть связаны, чтобы они появились. Вы также можете повторить один именованный параметр несколько раз в операторе, но вы можете связать его только один раз, чтобы передать значение — эта последняя часть работает, когда PDO настроен на эмуляцию через $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);,

7

Другие решения

Кажется, что это скорее вопрос, основанный на предпочтениях, поскольку нет строгого правильного или неправильного ответа.

Лично я избегаю ? так как он тесно связан с порядком параметров. Хотя теоретически вы не сможете испортить это, добавив или удалив привязку одной привязки, просто кажется, что это вызывает проблемы. Это (немного) меньше работы, хотя.

:name является более кратким и тесно связано с идентификацией привязок, а не произвольно с порядком. Это требует (крошечной) немного больше работы, но ее гораздо легче отлаживать, и она менее подвержена ошибкам.

Я предпочитаю быть (немного) сжатым, чем писать (немного) меньше кода.

4

Это разные заполнители

   ? -- > question mark placeholders
:name --> named Placeholders

Разница между named and question mark placeholders это с вопросительным знаком заполнителей вам нужно позаботиться о порядке, в котором они будут связаны с запросом.

1
По вопросам рекламы [email protected]