PHP bind_param将数字另存为i或s有什么区别?
在执行PHP prepare语句时,我们需要指定绑定类型,如i、s、d、b。如果我将数字绑定为“s”字符串,会有什么区别 数据库驱动程序(即php)将数据发送到DBMS的方式会有所不同。绑定类型时,数据首先转换为该特定类型,然后通过连接发送到DBMS。例如,假设PHP中的值是字符串PHP bind_param将数字另存为i或s有什么区别?,php,bindparam,Php,Bindparam,在执行PHP prepare语句时,我们需要指定绑定类型,如i、s、d、b。如果我将数字绑定为“s”字符串,会有什么区别 数据库驱动程序(即php)将数据发送到DBMS的方式会有所不同。绑定类型时,数据首先转换为该特定类型,然后通过连接发送到DBMS。例如,假设PHP中的值是字符串“9223372036854775808”。如果将其绑定为字符串,则数据将作为字符串发送到DBMS,DBMS可以自由执行任何内部转换,以将值打包并存储在指定的列类型下。但是,如果您将其绑定为整数,则PHP将首先执行强制
“9223372036854775808”
。如果将其绑定为字符串,则数据将作为字符串发送到DBMS,DBMS可以自由执行任何内部转换,以将值打包并存储在指定的列类型下。但是,如果您将其绑定为整数,则PHP将首先执行强制转换,然后再通过导线发送。这意味着该值首先变为(int)“9223372036854775808”
,从而产生值9223372036854775807
,然后打包为0xffffffff
的二进制有效负载。结果是DBMS将按原样接受数据,无需进一步更改
当然,这会产生不同的副作用。例如,整数大小(32位vs 64位vs任意精度)可能因控制强制转换和打包操作的人而异。此外,检查整数溢出/包装精度的责任落在谁执行强制转换和打包(驱动程序与DBMS)的一边。其他副作用包括通过电线的有效载荷大小。字符串大于压缩二进制整数
理想情况下,在这种情况下,特异性是一件好事。因为大多数情况下,数据库只能通过以字符串形式发送所有内容来与php通信。尽管驱动程序可以做出关于如何在PHP中表示该数据的更明智的决定(这对程序员来说应该很重要),只要给出该数据在两端之间绑定的更具体的表示。数据库驱动程序(即PHP)将数据发送到DBMS的方式就会有所不同。绑定类型时,数据首先转换为该特定类型,然后通过连接发送到DBMS。例如,假设PHP中的值是字符串
“9223372036854775808”
。如果将其绑定为字符串,则数据将作为字符串发送到DBMS,DBMS可以自由执行任何内部转换,以将值打包并存储在指定的列类型下。但是,如果您将其绑定为整数,则PHP将首先执行强制转换,然后再通过导线发送。这意味着该值首先变为(int)“9223372036854775808”
,从而产生值9223372036854775807
,然后打包为0xffffffff
的二进制有效负载。结果是DBMS将按原样接受数据,无需进一步更改
当然,这会产生不同的副作用。例如,整数大小(32位vs 64位vs任意精度)可能因控制强制转换和打包操作的人而异。此外,检查整数溢出/包装精度的责任落在谁执行强制转换和打包(驱动程序与DBMS)的一边。其他副作用包括通过电线的有效载荷大小。字符串大于压缩二进制整数
理想情况下,在这种情况下,特异性是一件好事。因为大多数情况下,数据库只能通过以字符串形式发送所有内容来与php通信。尽管驱动程序可以做出关于如何在PHP中表示该数据的更明智的决定(这对程序员来说应该很重要),因为它给出了数据在两端之间绑定的更具体的表示方式。不完全确定这是您正在使用的函数,但看起来这可能会有所帮助。不完全确定这是您正在使用的函数,但看起来这可能会有所帮助。谢谢谢里夫!这很有帮助。谢谢你,谢里夫!这很有帮助。我很感激。