PDO :: PARAM_INT在bindParam中很重要?

Jar*_*wol 24 php mysql pdo

在Mysql查询中添加PDO::PARAM_INTPDO::PARAM_STR有任何意义?

$sql  = 'SELECT TagId FROM tagthread WHERE ThreadId = :ThreadId';

$stmt = $this->db->prepare($sql);
$stmt->bindParam(':ThreadId', $threadid, PDO::PARAM_INT);

$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

bit*_*ing 22

是的,使用它.

我做了一些测试(使用PDO :: ATTR_EMULATE_PREPARES false),我发现值周围的引号会有所不同.

绑定整数值时,PARAM_INT查询中将不会有引号(带有PARAM_INT的字符串值具有引号).如果绑定一个整数值,PDO::PARAM_STR则会有引号,而mysql必须转换为整数.

例子:

$stmt->bindParam(':ThreadId', $threadid, PDO::PARAM_INT);
$threadid = 123;
// SELECT TagId FROM tagthread WHERE ThreadId = 123
$threadid = '123test';
// SELECT TagId FROM tagthread WHERE ThreadId = '123test'
// mysql will cast 123test to 123
Run Code Online (Sandbox Code Playgroud)

编辑:

我进一步测试并阅读了该主题.结论:Implicit casting is dangerous and can lead to unexpected results.这里阅读更多内容.总是使用的另一个缺点PDO::PARAM_STR是性能.阅读更多关于性能在Mysql查询中引用整数的缺点?

因此,如果您的列是类型而[TINY|SMALL|MEDIUM|BIG]INT不是使用PARAM_INT.如果它是一个LIMIT子句而不是强制转换为整数,如果PHP中的变量类型不是整数.