- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在Mysql查询中添加PDO::PARAM_INT
或PDO::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/
当与 $db->quote() 函数一起使用时,PDO::PARAM_INT 是否执行任何功能?例如$db->quote($user['id'], PDO::PARAM_INT)? 似乎是这样,因为即
以下是我的 MySQL 存储过程: DROP PROCEDURE IF EXISTS sp_authenticate; CREATE PROCEDURE sp_authenticate(IN user
有没有办法在PDOStatement::execute中指定PDO::PARAM_INT? 我习惯做以下事情...... $STH = $DBH->prepare('INSERT INTO items
在Mysql查询中添加PDO::PARAM_INT或PDO::PARAM_STR有什么意义吗? $sql = 'SELECT TagId FROM tagthread WHERE ThreadId
无论我将什么值/数据类型对传递给 $pdo->quote($value, $type);,它总是将其作为字符串引用: echo $pdo->quote('foo', PDO::PARAM_STR);
当使用 PDO::PARAM_INT 传递字符串时,PHP 7.2 中的行为似乎发生了变化。在版本 7.1 中更新的值和传递的字符串是相同的,在 PHP 7.2 中更新的值是“3”(见下面的例子)。
我是一名优秀的程序员,十分优秀!