Php 当您过滤PDO准备语句中的输入并且STR是整数形式时会发生什么?

Php 当您过滤PDO准备语句中的输入并且STR是整数形式时会发生什么?,php,pdo,prepared-statement,bindparam,filter-input,Php,Pdo,Prepared Statement,Bindparam,Filter Input,对于某些人来说,这可能有点基本,但在下面的语句中,如果字符串是一个整数e.x 007(如电影中所示),会发生什么情况: $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 如果颜色是“007”,PDO::PARAM_STR还能工作吗? int 12是做什么用的?它是指颜色的长度和$COLOR吗? 它的目的是最大化过滤器吗?只有12条线通过? 谢谢大家,我们还在努力破解PHP的新手册,但到目前为止还没有看到这方面的细节 完整的陈

对于某些人来说,这可能有点基本,但在下面的语句中,如果字符串是一个整数e.x 007(如电影中所示),会发生什么情况:

$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
如果颜色是“007”,PDO::PARAM_STR还能工作吗? int 12是做什么用的?它是指颜色的长度和$COLOR吗? 它的目的是最大化过滤器吗?只有12条线通过? 谢谢大家,我们还在努力破解PHP的新手册,但到目前为止还没有看到这方面的细节

完整的陈述


大多数时候,没有什么不好的事情发生。据我所知,SQL和PHP一样,是一种松散类型的语言,允许您将数字表示为字符串,因此您可以始终将整数格式化为字符串。只有几个:

模拟模式中的LIMIT子句或任何其他无法接受字符串操作数的SQL子句。 具有可能受错误操作数类型影响的非平凡查询计划的复杂查询 特殊的列类型,如BIGINT或BOOLEAN,需要绑定精确类型的操作数。请注意,要将BIGINT值与PDO::PARAM_INT绑定,需要基于mysqlnd的安装。 现在来举个例子。007实际上是一个字符串,而不是整数。在PHP中,无法获取前导为零的整数。但如果有一个实整数,您仍然可以将其绑定为字符串

int 12是做什么用的

这个数字有一个非常特殊的用途,仅用于存储过程,对常规查询没有任何影响


因此,你可以看出这个例子相当误导。

007将被视为八进制,如果你使用$carries=007;所以你需要用引号把它括起来。是的,我现在明白了,在这种情况下,我可以像任何普通字符串一样过滤,而不考虑添加12。。。只是找不到12的要点,想正确地应用代码。。。谢谢你的洞察力。嘿,伙计们,这些信息很有启发性。现在我想澄清一下,我实际上可以把12关了。简单的:$sth->bindParam:color',$color,PDO::PARAM_STR;在这种情况下,是否同样有效?
/* 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();