PDO执行数组返回null

时间:2014-08-17 01:34:34

标签: php pdo

我正在尝试一如既往地使用优秀的PDO,几乎所有东西都可以运行但只有一个查询:

$primary = 'my_id';
$table = 'my_table';
// This or...
$statement = $this->conn->prepare("SELECT MAX(:id) AS id FROM :table");
        $statement->bindParam(':id', $primary, PDO::PARAM_STR);
        $statement->bindParam(':table', $table, PDO::PARAM_STR);
        $statement->setFetchMode(PDO::FETCH_ASSOC);
        $statement->execute();

// This one. Both doesn't work.

$statement = $this->conn->prepare("SELECT MAX(:id) AS id FROM :table");
        $statement->setFetchMode(PDO::FETCH_ASSOC);
$arr = array(
            ':id' => 'my_id',
            ':table' => 'my_table',
        );
        $statement->execute($arr);

这些只返回一个空数组。我感到很困惑。所以我试过了:

$statement = $this->conn->prepare("SELECT MAX(".$primary.") AS id FROM ".$table);
        $statement->setFetchMode(PDO::FETCH_ASSOC);
        $statement->execute();

它有效。我觉得我错过了一些东西,但无法弄清楚。很明显绑定存在问题我尝试了不同的变体,比如手动编写其中一个变量,但到目前为止还没有运气。

提前感谢您的帮助......

1 个答案:

答案 0 :(得分:-1)

您不能在PDO中将参数用作表名,因此您必须对其进行更改以避免这种情况。这不是PDO的限制,而是直接限制MySQL。 manual表示

  

参数标记只能在数据值出现的地方使用,   不适用于SQL关键字,标识符等。

表和列名称是标识符,因此不支持使用占位符。有关替代方法,请参阅this question