【发布时间】:2012-01-08 23:39:25
【问题描述】:
我遇到了 $pdo->execute($values) 的问题。
如果我在没有 $values 的情况下使用 $pdo->execute(),它可以正常工作:
$dsn = sprintf('%s:host=%s;port=%s;dbname=%s', DB_TYPE, DB_HOST, DB_PORT, DB_NAME);
$pdo = new PDO($dsn, DB_USER, DB_PASS, array());
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM "user" ORDER BY id DESC LIMIT 50 OFFSET 0';
$stmt = $pdo->prepare(trim($sql));
$stmt->setFetchMode(PDO::FETCH_OBJ|PDO::FETCH_PROPS_LATE);
$stmt->execute();
echo "<pre>";
print_r($stmt->fetchAll());
echo "</pre>";
它工作正常,但是当我想添加值替换时:
$dsn = sprintf('%s:host=%s;port=%s;dbname=%s', DB_TYPE, DB_HOST, DB_PORT, DB_NAME);
$pdo = new PDO($dsn, DB_USER, DB_PASS, array());
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM "user" ORDER BY ? ? LIMIT 50 OFFSET 0';
$values = array('id','DESC');
$stmt = $pdo->prepare(trim($sql));
$stmt->setFetchMode(PDO::FETCH_OBJ|PDO::FETCH_PROPS_LATE);
$stmt->execute($values);
echo "<pre>";
print_r($stmt->fetchAll());
echo "</pre>";
它不起作用。它返回:
SQLSTATE[42601]:语法错误:7 错误:“$2”或附近的语法错误 第 1 行:SELECT * FROM "user" ORDER BY $1 $2 LIMIT 50 OFFSET 0 ^' in ...
【问题讨论】:
-
没有意识到你实际上可以在 order by 子句中使用 bind vars,我认为这就像为表名绑定 vars
标签: php postgresql pdo