Ich bin ein Problem mit einer SQL-Anweisung vorbereiten:Mehrere Variablen in vorbereitete Anweisung PHP
$statement = $conexion->prepare(
'SELECT * FROM celulares
WHERE (MARCA = :marca)
AND
(CATEGORIA = :categoria1 OR CATEGORIA = :categoria2 OR CATEGORIA = :categoria3)
AND
(CATEGORIA2 = :categoria1 OR CATEGORIA2 = :categoria2 OR CATEGORIA2= :categoria3)
AND
(CATEGORIA3 = :categoria1 OR CATEGORIA3 = :categoria2 OR CATEGORIA3 = :categoria3)');
Geben Platzhalter Werte mit diesem:
$statement->execute(array(':categoria1' => $categoria1,
':categoria2' => $categoria2,
':categoria3' => $categoria3,
':marca' => $query
));
$ query Wert variate kann, wenn meine Anwendung abhängig beginnt bei einigen Ergebnissen:
Ich habe eine Menge Dinge ausprobiert, aber keiner von denen ausgearbeitet es gibt eine leere ein rray, der einzige, der arbeitet, wurde diese Linie meiner vorbereiteten Aussage zu ändern:
WHERE (MARCA = :marca OR MARCA = :marca2 OR MARCA = :marca3)
Und wie viele „MARCA“, wie Ergebnisse, ich denke, es ist nicht der beste Weg, es zu tun
AKTUALISIERT:
Jetzt mit iN Statement in meiner Abfrage (Danke Du mir geholfen)
Jetzt sieht es aus wie der Versuch:
$marcas = array("LG", "HUAWEI"); (Static values for test)
$inQuery = implode(',', array_fill(0, count($marcas), '?'));
$statement = $conexion->prepare(
'SELECT * FROM celulares
WHERE (MARCA = IN (' . $inQuery . '))
AND
(CATEGORIA = :categoria1 OR CATEGORIA = :categoria2 OR CATEGORIA = :categoria3)
AND
(CATEGORIA2 = :categoria1 OR CATEGORIA2 = :categoria2 OR CATEGORIA2= :categoria3)
AND
(CATEGORIA3 = :categoria1 OR CATEGORIA3 = :categoria2 OR CATEGORIA3 = :categoria3)');
foreach ($marcas as $k => $marca) {
$statement->bindValue(($k+1), $marca);
}
$statement->bindValue(':categoria1', $categoria1);
$statement->bindValue(':categoria2', $categoria2);
$statement->bindValue(':categoria3', $categoria3);
$statement->execute();
Erste: Achtung: PDOStatement :: execute(): SQLSTATE [HY093]: Ungültige Parameternummer: gemischt Namen und Positionsparameter
Der Versuch, es zu beheben
Werfen Sie einen Blick auf (http [Kann ich ein Array zu einem iN() Zustand binden?]: // stac koverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition) und [FIND_IN_SET() vs IN()] (http://stackoverflow.com/questions/4155873/find -in-set-vs-in) – mrun
Ich denke, Sie müssen IN-Anweisung in Ihrer Abfrage und switch-case in PHP-Code verwenden. –
ich glaube nicht, dass Sie einen Parameterwert in einer preparedStatement setzen können, wenn dieser Wert tatsächlich eine SQL-Anweisung ist, wie diese $ query = $ query. 'ODER MARCA = "APPLE"' ', das sieht wie sql-injection aus und das ist ein Grund, warum PS erstellt wurde. to protected/escape ... so könnte der Abfragewert als Text eingefügt werden (escaped) Ich schlage vor, Sie übergeben ein Array als '$ query' Liste von' MARCA's, dann verwenden Sie es um Ihr SQL zu erstellen: '" MARCA =: val1 ODER MARCA =: val2 "' .. .etc basierend auf der marca Array-Länge, und setze dann die Parameter ': val1,: val2 ...' und führe aus. – Yazan