您需要尽可能多的?
占位符作为您的“IN”值。
所以:
$related = array(1,2,3); // your "IN" values
$sql = "SELECT id,title,pic1 FROM tbl_products WHERE id IN (";
$questionmarks = "";
for($i=0;$i<count($related);$i++)
{
$questionmarks .= "?,";
}
$sql .= trim($questionmarks,",");
$sql .= ") LIMIT 3;";
// echo $sql; // outputs: SELECT id,title,pic1 FROM tbl_products WHERE id IN (?,?,?) LIMIT 3;
$q = $db->prepare($sql);
$q->execute($related); // edited this line no need to array($related), since $related is already an array
echo $q->rowCount();
https://3v4l.org/No4h1
(如果你还想要4个返回记录摆脱LIMIT 3
)
更优雅,你可以使用str_repeat追加你的占位符这样的:
$related = array(1,2,3); // your "IN" values
$sql = "SELECT id,title,pic1 FROM tbl_products WHERE id IN (";
$sql .= trim(str_repeat("?,",count($related)),",");
$sql .= ") LIMIT 3;";
// echo $sql; // outputs: SELECT id,title,pic1 FROM tbl_products WHERE id IN (?,?,?) LIMIT 3;
$q = $db->prepare($sql);
$q->execute($related); // edited this line no need to array($related), since $related is already an array
echo $q->rowCount();
https://3v4l.org/qot2k
而且,通过再次阅读你的问题,我可以猜您$related
变量只是一个string
与像1,40,6,99
值逗号分隔的数字。如果是这种情况,您需要将其设为array
。做:$related = explode($related,",");
使它成为一个数组数组。然后在您的execute
方法中按原样传递$related
。
可能重复[FIND \ _IN \ _SET()vs IN()](http://stackoverflow.com/questions/4155873/find-in-set-vs-in) –
常见的路径是使用关系的额外表格。这是不好的数据库设计。 –
@GeraldSchneider我知道,这只是我的问题的一个示例。 –