Что происходит, когда вы фильтруете входные данные в подготовленном операторе PDO, а STR находится в форме интергера?

Для некоторых это может быть немного элементарно, но в чем-то вроде следующего утверждения, что произойдет, если строка будет целым числом (например, 007, как в фильме):

$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
  1. Если бы цвет был ‘007’, PDO :: PARAM_STR все еще работал бы?
  2. Для чего нужен int 12? это относится к длине (цвет & $ Цвет)?
  3. Это цель максимизировать фильтр? (только строки 12 проходят?)

Спасибо, ребята, все еще работаю над руководством по расшифровке (новичок в PHP), но пока не вижу деталей по этому вопросу.

Полное заявление Вот.

/* Execute a prepared statement by binding PHP variables */

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

0

Решение

В большинстве случаев ничего плохого не происходит. Насколько я знаю, SQL, как и PHP, является языком со свободной типизацией, который позволяет вам представлять число в виде строки, поэтому вы всегда можете отформатировать целые числа в виде строк. Есть только несколько исключительные случаи:

  • Предложение LIMIT в режиме эмуляции или любое другое предложение SQL, которое просто не может принять строковый операнд.
  • сложные запросы с нетривиальным планом запросов, на которые может повлиять неправильный тип операнда
  • специфические типы столбцов, такие как BIGINT или BOOLEAN, которые требуют привязки операнда точного типа (обратите внимание, что для привязки значения BIGINT с помощью PDO :: PARAM_INT требуется установка на основе mysqlnd).

Теперь к вашему примеру. 007 на самом деле строка, а не целое число. Вы не можете получить целое число с ведущими нулями в PHP. Но если есть целое число, вы все равно можете связать его как строку.

Для чего нужен int 12?

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

Таким образом, вы можете сказать, что пример довольно обманчив.

0

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

Других решений пока нет …

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