如何用PHP将1,2,3字符串解析为int

如何用PHP将1,2,3字符串解析为int,php,mysql,pdo,Php,Mysql,Pdo,我需要创建一个变量,比如1(int),(coma)2(int),(coma)等等。。从字符串1,2,3 它是函数的一个参数,位于 SELECT * FROM table WHERE id IN ([that string]); 使用PDOprepare语句 我尝试分解它,然后生成另一个变量,但仍然是字符串我需要1(int),(coma)2(int),(coma)不是字符串,因为字符串在这里不起作用 SELECT * FROM table WHERE id IN ([that string]);

我需要创建一个变量,比如
1(int),(coma)2(int),(coma)
等等。。从字符串
1,2,3
它是函数的一个参数,位于

SELECT * FROM table WHERE id IN ([that string]);
使用
PDO
prepare语句

我尝试分解它,然后生成另一个变量,但仍然是字符串我需要1
(int),(coma)2(int),(coma)
不是字符串,因为字符串在这里不起作用

SELECT * FROM table WHERE id IN ([that string]);
您可以使用:

$i = 1;
$y = 2;

$q = $i . "," . $y;

SELECT * FROM table WHERE id IN ($q);
你可以用。运算符以连接字符串

你说得对,
IN('1,2,3')
与(1,2,3)中的
不是同一个谓词。所以你不能只用一个字符串

如果您100%确定字符串包含整数,并且它不可能包含其他输入(例如,如果您的代码从确定为整数的值创建字符串),那么您可以简单地将列表插入到查询中

但我更喜欢在无法保证字符串只包含整数的情况下使用预处理语句

您可以制作一个准备好的语句,该语句的参数与列表中的元素计数相同

function afunc($string)
{
  $array_of_values = explode(",", $string);
  $array_of_placeholders = array_fill(1, count($values), "?");
  $string_of_placeholders = implode(",", $array_of_placeholders);
  $sql = "SELECT * FROM table WHERE id IN ($string_of_placeholders)";
  $stmt = $pdo->prepare($sql);
  $stmt->execute($array_of_values);
}
MySQL不在乎参数值是字符串还是整数。即使您使用了
bindParam($variable,PDO::PARAM_INT)
如果您阅读了PDO_mysql驱动程序的代码,像
PDO::PARAM_INT
这样的类型参数也会被忽略,所有参数都会作为字符串传递到mysql服务器。由于它们位于整数比较上下文中,SQL解析器将它们转换为整数(并去除任何非数字部分)。

试试看

$array[$key] = intval( $value );

这将把字符串解析为整数。请参见

这是一个常见问题。转换字符串没有帮助,因为
子句中的
需要一个值列表。但是,PDO本身不能绑定数组。生成
?,?,?
和列表解包需要一个手动解决方法。在英语中,“i”总是大写:)但是@mario如何?你能告诉我为什么要这样做吗?@user3881924好吧,我使用的是一些预先制作的东西,而不是繁琐的解决方法。例如,根据传递的列表将
扩展为绑定参数。这并不是不正确的,它只是与问题无关。@Boann,怎么不是呢?他需要找到一个带有整数值的
ID
。他说他分解了字符串,但仍然得到了字符串值。这就是他如何将其解析为整数的方法。为什么这是一个否决票?我甚至在手机上写了这封信,并试图提供帮助。这里的问题是什么?因为这句话:“它是int还是atring并不重要,你正在尝试连接,其余的都由php处理”是一个可怕的建议,可能会导致SQL注入漏洞。等等,你是在id所在的位置([array])插入一个数组吗?我使用了
infrade()
将占位符数组转换为逗号分隔的字符串。我将对其进行编辑以更清楚地显示。非常感谢您@bill karwin