php-在 bind_param() 中长时间使用 "s" 或 "i"?

php-use "s" or "i" for long in bind_param()?

关于prepared statementbind_param()函数,在php documentations中提到:

If you specify type "i" (integer), the maximum value it allows you to have is 2^32-1 or 2147483647. So, if you are using UNSIGNED INTEGER or BIGINT in your database, then you are better off using "s" (string) for this.

这里是说我们应该对 big int 列使用 s。但我尝试 i 在一个大的 int 列中插入一个 long 并且它工作正常。所以这让我很困惑!对于大整数,我们实际上应该使用 s 还是 i?!

几乎所有事情都应该使用 s。只有少数情况下您希望 mysqli 将值转换为适合您的类型。将所有内容绑定为字符串是最安全的选择。 SQL 无论如何都会将值转换为它需要的类型。

您在 php.net 网站上找到的评论意味着如果您将整数字符串转换为 PHP 本机整数,那么它可能会在 32 位系统上溢出。 PHP 使用有符号整数,这意味着 32 位系统上的最大值仅为 2147483647。如果您有大于此的整数,则应使用字符串以防止溢出。

BIGINT(64 位整数)和有符号 INT 都大于 PHP 32 位系统上的最大整数。但是,如果将所有内容都绑定为字符串,则无需担心丢失任何值。