gpt4 book ai didi

php - PDO::PARAM_INT 在 bindParam 中很重要吗?

转载 作者:IT老高 更新时间:2023-10-28 23:47:52 27 4
gpt4 key购买 nike

在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();

最佳答案

是的,使用它。

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

当您将整数值与 PARAM_INT 绑定(bind)时,查询中将没有引号(带有 PARAM_INT 的字符串值有引号)。如果您将整数值与 PDO::PARAM_STR 绑定(bind),则会有引号并且 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

编辑:

我进一步测试并阅读了该主题。结论:隐式转换很危险,可能会导致意外结果。阅读更多信息 here .始终使用 PDO::PARAM_STR 的另一个缺点是性能。阅读有关性能的更多信息 Disadvantages of quoting integers in a Mysql query?

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

关于php - PDO::PARAM_INT 在 bindParam 中很重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com