【问题标题】:How to do a select statement in a insert, while in php如何在插入中执行选择语句,而在 php 中
【发布时间】:2020-10-07 22:04:35
【问题描述】:

我在 PostgreSQL 中使用 PHP 中的 Web 应用程序工作。您看到的第一个查询工作得很好。第二个查询不起作用,并导致页面上出现一些小的视觉问题,例如无法加载图像。

如果我将 SELECT 语句替换为数字,例如 1,页面将正常加载。图像也将正确加载。

我确实测试了 $userID 和 $newJarName 变量,发现它们是正确的,但作为安全措施,我也将它们替换为静态数字和名称,发现仍然出现问题页面。

我尝试将 select 语句放入它自己的变量中,以及将整个查询放入它自己的变量中,但这些想法都没有奏效。

我在想我的语句中的某个地方的语法一定有问题,但我不知道。我确实访问过这个页面,但没有运气。

insert...select statement in postgresql combining inserted values from php with a select statement

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')
                    )"
                );  


        }

【问题讨论】:

    标签: php postgresql heroku insert


    【解决方案1】:

    如果要使用参数,则需要使用准备好的语句。
    这些查询都容易受到 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 是什么类型,所以我只是猜测......

    【讨论】:

    • 感谢您指出这一点,我完全忘记了。
    • 但我想它并没有解决您的问题...您可能想要添加更多关于不适合您的查询的信息。您从 postgress 收到的错误消息会有所帮助。也可能是使用的 2 个表的架构。
    • 今天晚些时候我将有机会处理它,希望一份准备好的声明能够解决它。如果没有,我会更新这些额外的细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2014-01-31
    • 2014-10-21
    相关资源
    最近更新 更多