Ich habe eine Abfrage (PHP, MySQL) eine Tabelle 'table' genannt, der wie folgt aussieht:pdo - vorbereitete Anweisung verliert Daten?
id | name
-------------
6 | abc
10| xxx
52| def
Und eine Abfrage:
$ids = '5,62'
$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN (:ids)');
$name -> bindValue(':ids', $ids, PDO::PARAM_STR);
$name -> execute();
$name = $name->fetchAll(PDO::FETCH_ASSOC);
print_r($nazwa);
Ich würde erwarten, ein Ergebnis wie
zu erhaltenid | name
-------------
6 | abc
52| def
Unofrtunately erhalte ich nur:
id | name
-------------
6 | abc
Als wäre der zweite Wert ignoriert. Wenn ich die Abfrage zu ändern:
$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN (' $ids ')');
Es geht alles richtig. Können Sie mir sagen, warum eine vorbereitete Aussage die implodierte Tabelle nicht mit Kommas betrachtet?
Zwei Parameter ist kein Parameter; 'bindValue' ist ein Parameter. Wenn dieser Wert Werte für zwei Parameter enthält, verwenden Sie das falsche Tool. Und ja, das wurde schon mal gefragt. "IN()" plus vorbereitete Anweisungen, z.B. hier ein Beispiel für eine variable Anzahl von Parametern und PDO: http://StackOverflow.com/A/7128193/367456 – hakre
Ich habe gelesen, dass Sie Link zur Verfügung gestellt, aber es macht mich immer noch nicht auf meinem Weg, um das Problem zu lösen. Für mich ist "bind" eine Variable, die ich zu einer früher gemachten Abfrage gesetzt habe. Und ich diese Case-String '6, 52' ist nur eine andere Zeichenfolge, die zwischen (und) in MySQL-Abfrage platziert wird. Ich sehe nicht, dass es zwei, drei und mehr Parameter sind. Ich weiß nicht, warum ich es auf dieser Ebene als 2 oder mehr behandeln sollte. Sorry dafür - ich bin neu in pdo – Kalreg