Sie benötigen so viele ?
Platzhalter als Ihre "IN" -Werte.
So:
$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
(auch wenn Sie wollen 4 Aufzeichnungen des LIMIT 3
zurückerhalten los)
Mehr elegant können Sie str_repeat verwenden, um Ihre Platzhalter wie folgt anhängen:
$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
Auch durch die wieder Ihre Frage zu lesen, ich kann erraten, dass Ihr $related
Variable ist nur ein string
mit Wert durch Komma getrennte Zahlen wie 1,40,6,99
. Wenn dies der Fall ist, müssen Sie es zu einem array
machen. tun: $related = explode($related,",");
, um es zu einem Array von Zahlen zu machen. Dann in Ihrer execute
Methode übergeben Sie $related
wie-ist.
Mögliches Duplikat von [FIND \ _IN \ _SET() vs IN()] (http://stackoverflow.com/questions/4155873/find-in-set-vs-in) –
Der allgemeine Pfad ist, ein zu verwenden extra Tabelle für die Beziehung. Dies ist ein schlechtes Datenbankdesign. –
@GeraldSchneider Ich weiß, dass dies nur ein Beispiel für meine Frage ist. –