如何解决php-在bind_param() 中长时间使用“s”或“i”?
关于function findTopValues(dataArray,n) {
var resultArray = [];
var dataArraycopy = dataArray.slice();
var topNArray = dataArraycopy
.sort(function (begin,end) {
return end - begin;
})
.slice(0,n);
for (let ele of topNArray) {
resultArray.push([dataArray.indexOf(ele),ele]);
}
return resultArray;
}
var dataArray = [12,5,20,4,50,23,98,8];
console.log(findTopValues(dataArray,3))
的{{1}}函数,在php documentations中提到:
如果您指定类型“i”(整数),它允许您拥有的最大值是 2^32-1 或 2147483647。因此,如果您在您的文件中使用 UNSIGNED INTEGER 或 BIGINT数据库,那么您最好为此使用 "s" (字符串)。
这里是说我们应该对 bind_param()
列使用 prepared statement
。但我尝试 s
在一个大的 int 列中插入一个 long 并且它工作正常。所以这让我很困惑!对于 big int,我们实际上应该使用 big int
还是 i
?!
解决方法
几乎所有的事情都应该使用 s
。当您希望 mysqli 将值转换为适合您的类型时,只有少数场景。将所有内容绑定为字符串是最安全的选择。 SQL 无论如何都会将该值转换为它需要的类型。
您在 php.net 网站上发现的评论意味着,如果您将整数字符串转换为 PHP 原生整数,那么它可能会在 32 位系统上溢出。 PHP 使用有符号整数,这意味着在 32 位系统上的最大值只有 2147483647。如果你有一个大于这个的整数,你应该使用字符串来防止溢出。
BIGINT(64 位整数)和有符号 INT 都大于 PHP 32 位系统上的最大整数。但是,如果将所有内容绑定为字符串,则无需担心丢失任何值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。