我需要从字符串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]);
答案 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)