1

这个查询有什么问题?

我无法让这个查询传递这些参数!

$offset = 5;
$rowsperpage = 10;
$stmt = $db->prepare("SELECT * FROM table ORDER BY ID DESC LIMIT ?,?");
if ($stmt->execute(array($offset, $rowsperpage))) {
  while ($row = $stmt->fetch()) {
    echo $row['title'];
  }
}

如果我将查询更改为此它可以正常工作,但我需要传递字符串,因为它们是动态的。

$stmt = $db->prepare("SELECT * FROM table ORDER BY ID DESC LIMIT 5,10");
if ($stmt->execute(array($offset, $rowsperpage))) {
  while ($row = $stmt->fetch()) {
    echo $row['title'];
  }
}
4

2 回答 2

4

我有一种感觉,“延迟执行”将所有参数视为字符串,因此将它们括在引号中。

所以,要么显式绑定你的参数,使用 bind_param 而不是将数组传递给 execute()

或将仿真模式设置为关闭

$db->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

连接后。

无论如何,您必须先与错误消息取得联系。
所以,设置这个

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

将向您显示错误消息

于 2013-01-15T14:14:40.023 回答
0

您忘记执行bind_param来填空

于 2013-01-15T14:16:30.557 回答