PHP bind_param сохранить номер как я или с, какая разница? - PullRequest
1 голос
/ 20 февраля 2020

Когда мы делаем PHP подготовить оператор, нам нужно указать тип связывания, такой как i, s, d, b. Какая разница, если я связываю число как строку "s"?

1 Ответ

0 голосов
/ 20 февраля 2020

Это имеет значение в том, как драйвер базы данных ( т.е. php) отправляет данные в вашу СУБД. При связывании типа данные сначала приводятся к указанному типу c, а затем отправляются по проводам в вашу СУБД. Например, допустим, что значение, которое вы указали в PHP, является строкой "9223372036854775808". Если вы связываете его как строку, данные отправляются в СУБД в виде строки, и СУБД может выполнять любое внутреннее преобразование, необходимое для упаковки и сохранения значения в указанном типе столбца. Однако, если вы связываете его как целое число, то PHP - это тот, кто первым выполняет приведение перед отправкой по проводам. Это означает, что значение сначала становится (int) "9223372036854775808", что приводит к значению 9223372036854775807, а затем упаковывается как двоичная полезная нагрузка 0xffffffff. В результате СУБД будет принимать данные без изменений.

Это, конечно, создает различные побочные эффекты. Например, целочисленный размер (32 бита против 64 бита против произвольной точности) может варьироваться в зависимости от того, кто контролирует операции приведения и упаковки. Более того, ответственность за проверку целочисленного переполнения / точности переноса ложится на сторону того, кто выполняет приведение и упаковку ( драйвер по сравнению с СУБД ). Дополнительные побочные эффекты включают размер полезной нагрузки, которая идет по проводам. Строка больше, чем упакованное двоичное целое число.

В идеале в данном случае важна специфичность. Потому что в основном база данных может общаться только с php, отправляя все в виде строки. Хотя драйвер может принимать более разумные решения о том, как представлять эти данные внутри PHP (что должно иметь значение для программиста), учитывая более точное c представление о том, как эти данные связаны между двумя концами .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...