【问题标题】:Issue with parameter resource in postgresql querypostgresql 查询中的参数资源问题
【发布时间】:2020-07-05 11:31:13
【问题描述】:

我有一个名为 rasivdb 的数据库,其中有一个名为“users”的表,其中有一列“owner”。此列确定哪个管理员创建了该用户,以及当管理员登录时,将列出他创建的所有用户。为此,我只想获取当前会话中“所有者”等于“名称”的用户。所以只有登录管理员创建的用户才会被列出

但是我遇到了一个错误。 我得到的错误是:

Warning: pg_query() expects parameter 1 to be resource, object given in C:\xampp\htdocs\FileSender\menu.php on line 33

Warning: pg_fetch_assoc() expects parameter 1 to be resource, null given in C:\xampp\htdocs\FileSender\menu.php on line 40

我的数据库似乎没有成为资源?我该怎么做?

我得到错误的菜单文件:

<?php 
$ownername;

if (isset($_SESSION['name'])) {
    $ownername = $_SESSION['name'];
}

?>
<div class="sidebar">
    <!-- start user list -->
    <ul class="nav">
        <?php

        //get data by databas class

        if (isset($_SESSION['name'])) {
        /*$db->select('users')->where('owner', $ownername);
        $result = $db->get();*/


         $result = pg_query($db, "SELECT * FROM user WHERE owner='$ownername'");


        /**
         * $result must not be null or zero
         * check $result
         */
        while($row=pg_fetch_assoc($result)) {

            /*foreach ($result as $row) {*/

                /**
                 * variable to save selection state of menu item
                 */
                $active_state = "";

                /**
                 * check $_GET['user'] variable
                 * if no set, use info of user that logged in 
                 */
                if (isset($_GET['user'])) {

                    /** 
                     * compare two variable
                     * if two variable is same, this item is active.
                    */
                    if ($_GET['user'] == $row['1']) {

                        $active_state = "active";
                    }
                } else {

                    /**
                     * if $_GET['user'] doesn't exist, check $_SESSION['name']
                     * it is needed when user log in.
                     * when user log in, $_GET['user'] doesn't exist but item for user must be active
                     */

                    if ((isset($_SESSION['name']) && $_SESSION['name'] ==  $row['1'])) {

                        $active_state = "active";
                    /*}*/
                }
            }
                ?>

                <!-- output each user -->
                <li>

                    <a href="images.php?user=<?php echo $row["1"] ?>" class="nav-item <?php echo $active_state ?>"><?php echo $row["1"] ?></a>

                    <?php

                    if ($active_state != "" && isset($categories) && count($categories) > 0) {

                        /**
                         * category block for each user
                         */
                        echo '<ul class="sub-menu">';

                        foreach ($categories as $item) {

                            if ($item['1'] == $cat) {

                                echo '<li ><a class="nav-item active" href="./images.php?user=' . $row['1'] . '&cat=' . $item['1'] . '">' . $item['1'] . '</a></li>';
                            } else {

                                echo '<li ><a class="nav-item" href="./images.php?user=' . $row['1'] . '&cat=' . $item['1'] . '">' . $item['1'] . '</a></li>';
                            }
                        }

                        echo "</ul>";
                    }
                    ?>
                </li>
                <!-- end -->

                <?php

            }

            if( isset( $_SESSION['role'] ) && $_SESSION['role'] == "admin"){
                echo '<li><a class="nav-item" href="./admin.php">Admin</a></li>';
                if (isset($_SESSION['name'])) {
    echo $_SESSION['name'];
}
            }
        } 
        else {
            //
        }
        ?>


    </ul>
    <!-- end user li st -->
</div> 

为了您的信息,此文件仅用于在 index.php 中调用的sidemenu,其中连接了数据库并激活了 session_start()。问题不存在。在 index.php 文件中,它在调用所有这些的顶部看起来像这样:

    include("./classes/config.class.php");

    include("./classes/databas.class.php");

    $db = Databas::getInstance();

    session_start();

这是我的数据库:

class Databas
{

    var $conn;

    var $sql;

    private static $instance;

    public static function getInstance()
    {
        if (!isset(static::$instance)) {
            static::$instance = new static;
        }
        return static::$instance;
    }

    function __construct()
    {
        //connect database
        $config = Config::getInstance();
        //$conn = new mysqli('$config->dbServer', '$config->dbUser', '$config->dbPwd', '$config->dbName' );
        $conn = pg_connect("host=".$config->dbServer." dbname=".$config->dbName." user=".$config->dbUser." password=".$config->dbPwd );

        if (!$conn) {
            die("Connection failed: ");
        } else {
            $this->conn = $conn;
        }
    }

这是我的配置文件:

class Config {


    public $dbServer = "localhost";
    public $dbUser = "postgres";
    public $dbPwd = "pass";
    public $dbName = "databasename";

    private static $instance;

    public static function getInstance()
    {
        if (!isset(static::$instance)) {
            static::$instance = new static;
        }
        return static::$instance;
    }

【问题讨论】:

    标签: php sql postgresql


    【解决方案1】:

    pg_query() 需要连接资源,而不是 Databas 类的对象。

    试试

    $result = pg_query($db->conn, "SELECT * FROM user WHERE owner='$ownername'");
    

    而不是

    $result = pg_query($db, "SELECT * FROM user WHERE owner='$ownername'");
    

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多