Как указано в другом ответе, все ваши значения, полученные из HTML, являются строками. Тем не менее, вы можете получать информацию из других источников, которую вы хотели бы передать в свое заявление. Что произойдет, если вы все время будете использовать привязку строк?
Лучший способ - проверить это.
$data1 = '1';
$data2 = 2;
$data3 = '0.5-a';
$stmt = $mysqli->prepare('SELECT ?=1 AS f1, ?="2" AS f2, ?=0.5 AS f3');
$stmt->bind_param('sss', $data1, $data2, $data3); // binding string
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
var_dump($row); // all true
В этих простых примерах нет разницы. Почему? Потому что MySQL приведёт строку к соответствующему типу, если она используется в числовом контексте.
Зачем указывать тип явно, если почти все может быть отправлено в виде строки?
Поскольку, если вы знаете тип данных ваших значений, вам не следует возвращать их ивперед. Если у вас есть целые числа и вы используете их в MySQL в числовом контексте, то нет смысла приводить их к строке в MySQLi bind_param()
.
Еще один важный случай использования - это когда MySQL действительно делает различие в типах. Например, в пункте ORDER BY
. Если вы связываете строку вместо числа, порядок будет другим. MySQL может принимать либо порядковый номер, представляющий номер столбца в SELECT
, либо имя столбца (которое не может быть связано), либо строковый литерал.
$data1 = '2';
// I want the records to be ordered by `name`, which is the second column
$stmt = $mysqli->prepare('SELECT id, name FROM products ORDER BY ?');
$stmt->bind_param('i', $data1); // binding integer instead of string
Связанный пост: mysqli_stmt :: bind_param () - укажите другой тип данных, кроме «s» для каждого параметра
Когда дело доходит до двоичного или большого двоичного объекта,они просто двоичные строки. Это означает, что у них нет набора символов, а сортировка и сравнение основаны на числовых значениях байтов в значениях столбцов.
Если вам когда-нибудь понадобится вставить значение большого двоичного объекта, оно, скорее всего, не придет из формы HTML какСтрока, а скорее из чтения в файле, и вы будете знать, что вам нужно использовать b
.