Как сделать оператор выбора во вставке, а в php - PullRequest
0 голосов
/ 18 июня 2020

Я работаю в PostgreSQL с веб-приложением в PHP. Первый запрос, который вы видите, работает нормально. Второй запрос не работает и вызывает некоторые незначительные визуальные проблемы на странице, например, изображение, которое не загружается.

ЕСЛИ я заменю оператор SELECT числом, например 1, страница загрузится правильно и вроде нормально. Изображение также загрузится правильно.

Я протестировал переменные $ userID и $ newJarName и обнаружил, что они верны, но в качестве меры предосторожности я также заменил их числами и именами stati c и обнаружил, что у меня все еще есть проблемная страница.

Я попытался поместить оператор select в его собственную переменную, а также весь запрос в его собственную переменную, и ни одна из этих идей не сработала.

Я думаю, что у меня где-то проблема с синтаксисом в моем заявлении, но я не могу сказать. Я посетил эту страницу, и мне не повезло.

insert ... select в postgresql, комбинируя вставленные значения из php с оператором select

function insertNewJar($newJarName, $userID, $db){
            $db->query(
                "INSERT into jars (jar_owner_id, jar_total, jar_active, jar_name)
                VALUES (
                        '$userID',
                        0,
                        true,
                        '$newJarName')"
                    );

                //linkJar($newJarName, $userID, $db);
                //$select = "(SELECT jar_id FROM jars WHERE jar_owner_id = '$userID' AND jar_name = '$newJarName')";



                $db->query(
                    "INSERT INTO users_jars (user_id, jar_id)
                    VALUES(
                        '$userID',
                        (SELECT jar_id FROM jars WHERE jar_owner_id = $userID AND jar_name = '$newJarName')
                    )"
                );  


        }

1 Ответ

1 голос
/ 18 июня 2020

Вам необходимо использовать подготовленные операторы, если вы хотите использовать параметры.
Оба запроса восприимчивы к sql инъекции.

С PDO это будет выглядеть примерно так:

$sth = $dbh->prepare('
    INSERT INTO users_jars (user_id, jar_id)
    VALUES(?, (SELECT jar_id FROM jars WHERE jar_owner_id = ? AND jar_name = ?))
');
$sth->execute(array($userID, $userID, $newJarName));

Я не знаю, к какому типу относится ваш $db, поэтому я просто предполагаю ...

...