Php 指定mysqli绑定参数类型

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); 那么查

指定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);
那么查询将相当于:

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
对大多数数据类型都同样有效;不包括水滴。