Php 指定mysqli绑定参数类型
指定mysqli bind_param类型的优缺点是什么Php 指定mysqli绑定参数类型,php,mysqli,Php,Mysqli,指定mysqli bind_param类型的优缺点是什么 我将UNIX时间戳存储在数据类型为INT的db列中。在我准备的语句中,我将其设置为bind_param('s',$timestamp)并且它存储值时没有任何问题。那么,在bind_param期间,我使用s而不是I会产生什么影响呢?它会影响MySQL查看查询/值的方式。以这个查询为例: INSERT INTO foo VALUES (?) 如果将参数绑定为int: $stmt->bind_param('i', $bar); 那么查
我将UNIX时间戳存储在数据类型为INT的db列中。在我准备的语句中,我将其设置为
bind_param('s',$timestamp)代码>并且它存储值时没有任何问题。那么,在bind_param
期间,我使用s
而不是I
会产生什么影响呢?它会影响MySQL查看查询/值的方式。以这个查询为例:
INSERT INTO foo VALUES (?)
如果将参数绑定为int:
$stmt->bind_param('i', $bar);
那么查询将相当于:
INSERT INTO foo VALUES (42)
INSERT INTO foo VALUES ('42')
但是,如果绑定为字符串:
$stmt->bind_param('s', $bar);
该查询大约相当于:
INSERT INTO foo VALUES (42)
INSERT INTO foo VALUES ('42')
在许多情况下,MySQL并不特别关心是发送字符串还是int,而是会像PHP在大多数时间一样,随时将值转换为适当的类型。但是,在某些情况下,对于某些类型,您可能会得到意外的转换,这就是为什么您应该将值绑定为您想要的类型,而不是让它由MySQL的强制转换规则决定。它会影响MySQL查看查询/值的方式。以这个查询为例:
INSERT INTO foo VALUES (?)
如果将参数绑定为int:
$stmt->bind_param('i', $bar);
那么查询将相当于:
INSERT INTO foo VALUES (42)
INSERT INTO foo VALUES ('42')
但是,如果绑定为字符串:
$stmt->bind_param('s', $bar);
该查询大约相当于:
INSERT INTO foo VALUES (42)
INSERT INTO foo VALUES ('42')
在许多情况下,MySQL并不特别关心您是发送一个字符串还是一个int,只需动态地将值转换为适当的类型,就像PHP在大多数情况下所做的那样。但是,在某些情况下,对于某些类型,您可能会得到意外的转换,这就是为什么您应该将值绑定为您想要的类型,而不是将其留给MySQL的强制转换规则。您阅读了手册吗?=>这与执行SET row=123
和SET row='123'
之间的区别相同。MySQL将为您将值转换为正确的类型。这样做bind_param('i',$timestamp)
将保存MySQL转换操作。简而言之,如果您的列是INT
,并且您在整数WHERE column='1'
而不是WHERE column=1
周围加引号,则可能会产生不同。对于数学方程式和将数据/图像存储到表格中的d
和b
也有同样的情况。如果不选择b
,您将得到一些意想不到的惊喜。@Fred ii-:MySQL将在字符串和int之间转换,但可能会有这样的情况引起问题。@RocketHazmat我同意。对于大多数字符串值,我使用s
。如果它开始给我带来困难,我会求助于它最有可能是什么。99%的时间,s
对大多数数据类型都同样有效;排除斑点。您是否阅读了手册?=>这与执行SET row=123
和SET row='123'
之间的区别相同。MySQL将为您将值转换为正确的类型。这样做bind_param('i',$timestamp)
将保存MySQL转换操作。简而言之,如果您的列是INT
,并且您在整数WHERE column='1'
而不是WHERE column=1
周围加引号,则可能会产生不同。对于数学方程式和将数据/图像存储到表格中的d
和b
也有同样的情况。如果不选择b
,您将得到一些意想不到的惊喜。@Fred ii-:MySQL将在字符串和int之间转换,但可能会有这样的情况引起问题。@RocketHazmat我同意。对于大多数字符串值,我使用s
。如果它开始给我带来困难,我会求助于它最有可能是什么。99%的时间,s
对大多数数据类型都同样有效;不包括水滴。