pdo-запрос не выполняется при передаче переменной в качестве запроса

У меня есть команда pdo, как это $sql = $pdoObj->execute($query) но это не работает, 0 результат возвращается. Я повторил $query переменная перед вызовом execute() а затем вставил его в execute() и код успешно запустился. Я не могу понять, в чем здесь проблема, поскольку я сделал это в других частях моего кода без проблем. Вот несколько примеров запросов:

SELECT s.id, s.marca, s.colore, s.prezzo, i.id_scarpa, i.taglia FROM scarpe AS s INNER JOIN info_scarpe AS i ON i.id_scarpa = s.id WHERE 1 = 1 AND taglia IN ('40','41','42') AND colore IN ('rosso', 'nero')

SELECT * FROM scarpe WHERE 1=1

SELECT * FROM scarpe WHERE 1=1 AND marca IN ('adidas','nike')

Все они представляют собой динамически генерируемые запросы, основанные на $_GET переменная.

РЕДАКТИРОВАТЬ: Конечно

if ( isset($_GET) ) {

                if ( isset($_GET['taglia']) ) {

                    $query = "
                            SELECT 
                                s.id, s.marca, s.colore, s.prezzo, i.id_scarpa, i.taglia
                            FROM 
                                scarpe AS s
                            INNER JOIN
                                info_scarpe AS i
                            ON i.id_scarpa = s.id
                            WHERE
                                1 = 1
                    ";
                    foreach ( $_GET as $index => $val ) {
                        $a = explode(',', $val);
                        $in =  "'" . implode("','",  $a) . "'";
                        $query .= ' AND '.$index.' IN ('.$in.')';
                    }
                } else {
                    $query = " SELECT * FROM scarpe WHERE 1=1";
                    foreach ( $_GET as $index => $val ) {
                        $a = explode(',', $val);
                        $in =  "'" . implode("','",  $a) . "'";
                        $query .= ' AND '.$index.' IN ('.$in.')';
                    }
                }
                echo 'data loaded';
            } else {
                $query = " SELECT * FROM scarpe ORDER BY id DESC ";
            }

EDIT2:

я использую query() и не execute() но все равно не работает

1 ответ

Решение

Аргументы за execute должен быть массив с параметрами запроса. Вы хотите использовать либо

$result = $pdoObj->query($query);

ИЛИ ЖЕ

$stmt = $pdoObj->prepare($query);
$stmt->execute();
Другие вопросы по тегам