【问题标题】:PDO Set Query Table variablePDO 设置查询表变量
【发布时间】:2018-09-22 05:02:20
【问题描述】:

是否可以使用 PDO 进行查询并将表分配为变量?

例如:

        $db = new PDO($this->driver . ":server={$this->host};Database={$this->database_name};", $this->username, $this->password);

        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $db->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 200 );

        $query = 'SELECT top 10 * FROM ' . $this->table . ' ' . $query;
        $stmt = $db->prepare($query);
        $stmt->execute();

        return $stmt->fetchAll();

我需要能够将表​​名称作为参数传递。我尝试了很多东西,但似乎没有任何效果。我也试过sqlsrv_query

我使用 lumen 作为我的框架。不知道有什么我可以用来做这件事的。

【问题讨论】:

    标签: php sql-server pdo lumen


    【解决方案1】:

    你的问题是你的查询语句。您已将 $query 添加到 $query 的末尾。

    试试:

    $query = 'SELECT top 10 * FROM ' . $this->table;
    

    关于第二个音符。仅当您信任 $this->table 的内容时才执行此操作非常重要。这意味着它不是用户生成的。 PDO 不允许参数化的表名。

    【讨论】:

      【解决方案2】:

      你可以试试这个方法:(检查$stmt是否有变化)

          $db = new PDO($this->driver . ":server={$this->host};Database={$this->database_name};", $this->username, $this->password);
      
          $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
          $db->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 200 );
      
          $query = 'SELECT top 10 * FROM :table';
          $stmt = $db->prepare($query);
          $stmt->execute(
              array(
                 ':table' => $this->table
             );
          return $stmt->fetchAll();
      

      【讨论】:

      • 我认为 PDO 不允许您这样做。
      • 表或列名不能使用占位符,只能在允许表达式的地方使用。
      • 你的方法对参数很好,但不能用于列名或表名。
      猜你喜欢
      • 2011-04-28
      • 2023-03-16
      • 2013-08-11
      • 2021-02-11
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多