PDO从MYSQL db中选择

时间:2014-12-12 14:19:59

标签: php mysql select pdo

这个主题有很多提示,我试过这个:How to create a secure mysql prepared statement in php? 和许多其他人一样,但没有任何工作。如果我想从数据库中选择一些东西而不用参数进行查询,那就没问题了。但是,如果我想要一个带有参数的列和表的数据,它不起作用,它返回空数组。任何提示?

有我的代码:

function getDataByColumn($column, $table) {
    try {
        $connection = new PDO("mysql:dbname=vydap;charset=utf8;host=127.0.0.1", "...","...");
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    $query = "SELECT ? FROM ?";
//  $query = "SELECT :column FROM :table";
    $stmt = $connection->prepare($query);
//  $stmt->bindParam(':column', $column);
//  $stmt->bindParam(':table', $table);    
    $stmt->bindParam(1, $column);
    $stmt->bindParam(2, $table);
    $stmt->execute();
    $result = $stmt->fetchAll();
    var_dump($result);
}

2 个答案:

答案 0 :(得分:2)

这是完全错误的:

$query = "SELECT ? FROM ?";

占位符只能代表 VALUES 。您不能对字段/表/数据库名称使用占位符 - 这些不是值 - 它们是识别符。

SELECT foo FROM bar WHERE foo = 'baz'
   a    b   c    d   e    f   g   h

a- sql keyword
b- field identifier
c- sql keyword
d- table identifier
e- sql keyword
f- field identifier
g- operator
h- value

在整个查询中,只有h部分才是使用占位符的候选者。

答案 1 :(得分:0)

您不能在表名或列名上使用PDO占位符。这些仅用于值:

$query = "SELECT * FROM yourTable WHERE someCol = ?";

$stmt->bindParam(1, $value);