当您过滤 PDO 准备语句中的输入并且 STR 是整数形式时会发生什么?
What happens when you filter input in PDO prepared statement and the STR is in the form of an interger?
这对某些人来说可能有点初级,但在类似下面的语句中,如果字符串是整数(e.x 电影中的 007)会发生什么:
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
- 如果颜色为“007”,PDO::PARAM_STR 仍然有效吗?
- int 12 有什么用?它是指 (colour & $colour) 的长度吗?
- 最大化过滤器的目的是什么? (只有 12 串才能通过?)
谢谢大家,仍在研究解密手册(PHP 的新手),但到目前为止还没有看到这方面的细节。
完整语句here.
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
大多数时候不会发生任何错误。据我所知,SQL 就像 PHP 一样,是一种松散类型的语言,允许您将数字表示为字符串,因此您始终可以将整数格式化为字符串。只有几个exceptional cases:
- 仿真模式下的 LIMIT 子句或任何其他 SQL 不能接受字符串操作数的子句。
- 具有重要查询计划的复杂查询可能会受到错误操作数类型的影响
- 特殊的列类型,如 BIGINT 或 BOOLEAN,需要绑定精确类型的操作数(请注意,为了将 BIGINT 值与 PDO::PARAM_INT 绑定,您需要基于 mysqlnd 的安装)。
现在举个例子。 007
实际上是一个字符串,而不是整数。您无法在 PHP 中获得带前导零的整数。但是如果有一个真正的整数,你仍然可以将它绑定为一个字符串。
What is int 12 for?
此数字具有非常特殊的用途,仅用于存储过程,对常规查询没有任何影响。
所以你可以看出这个例子相当具有误导性。
这对某些人来说可能有点初级,但在类似下面的语句中,如果字符串是整数(e.x 电影中的 007)会发生什么:
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
- 如果颜色为“007”,PDO::PARAM_STR 仍然有效吗?
- int 12 有什么用?它是指 (colour & $colour) 的长度吗?
- 最大化过滤器的目的是什么? (只有 12 串才能通过?)
谢谢大家,仍在研究解密手册(PHP 的新手),但到目前为止还没有看到这方面的细节。
完整语句here.
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
大多数时候不会发生任何错误。据我所知,SQL 就像 PHP 一样,是一种松散类型的语言,允许您将数字表示为字符串,因此您始终可以将整数格式化为字符串。只有几个exceptional cases:
- 仿真模式下的 LIMIT 子句或任何其他 SQL 不能接受字符串操作数的子句。
- 具有重要查询计划的复杂查询可能会受到错误操作数类型的影响
- 特殊的列类型,如 BIGINT 或 BOOLEAN,需要绑定精确类型的操作数(请注意,为了将 BIGINT 值与 PDO::PARAM_INT 绑定,您需要基于 mysqlnd 的安装)。
现在举个例子。 007
实际上是一个字符串,而不是整数。您无法在 PHP 中获得带前导零的整数。但是如果有一个真正的整数,你仍然可以将它绑定为一个字符串。
What is int 12 for?
此数字具有非常特殊的用途,仅用于存储过程,对常规查询没有任何影响。
所以你可以看出这个例子相当具有误导性。