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

时间:2014-07-27 15:54:50

标签: php mysql pdo

我需要从字符串1(int),(coma)2(int),(coma)创建一个像1,2,3这样的变量... 它是

中放置的函数的参数
SELECT * FROM table WHERE id IN ([that string]);

使用PDO准备声明。

我试图将其爆炸然后再制作另一个变量但仍然是STRING我需要1 (int),(coma)2(int),(coma) NOT字符串,因为STRING在这里不起作用

SELECT * FROM table WHERE id IN ([that string]);

3 个答案:

答案 0 :(得分:1)

你是对的,IN('1,2,3')IN(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并不关心参数值是字符串还是整数。即使您在阅读PDO_mysql驱动程序的代码时使用bindParam($variable, PDO::PARAM_INT),也会忽略PDO::PARAM_INT之类的类型参数,并将所有参数作为字符串传递给MySQL服务器。由于它们处于整数比较上下文中,因此SQL解析器将它们转换为整数(并剥离任何非数字部分)。

答案 1 :(得分:-1)

您可以使用:

$i = 1;
$y = 2;

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

SELECT * FROM table WHERE id IN ($q);

你可以使用。运算符以连接字符串。

答案 2 :(得分:-1)

尝试

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

这会将字符串解析为整数。见intval