【问题标题】:PDO/PHP : Fetch Array and Prepared StatementsPDO/PHP:获取数组和准备好的语句
【发布时间】:2012-08-05 20:08:07
【问题描述】:

如您所见,我试图在使用准备好的语句时从表中获取行。

$stmt = $conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?, 10");
$stmt->bindParam(1, $row_start, PDO::PARAM_INT);
$stmt->execute();

while($row = $stmt->fetch()) {
echo $row['title'];
echo $row['name'];
}

它不回显任何东西。

编辑:var_dump 正在显示此日志:

“您的 SQL 语法有错误;请查看手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 ''0', 10' 附近"}

编辑 2:这是我声明我的 $row_start

的方式
$row_start = "0";
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] != "0" )
{
$row_start = $_GET['page'];
if ($row_start == "1") {
$row_start = "0";
}else{
$row_start = ($row_start-1) * 10;
}                       
}

【问题讨论】:

  • 直接在数据库中运行 SQL 是否有效?
  • @andrewsi 是的!如果我用数字替换 ? 并运行它,它确实有效。
  • 尝试将参数显式绑定为整数$stmt->bindParam(1, $row_start, PDO::PARAM_INT);
  • 数据库有返回什么吗? var_dump($stmt->errorInfo()) 打印什么吗?
  • @xperator - 哦,我也弄错了强制转换代码 - 它应该是 (int) $row_start 和空格。

标签: php arrays pdo prepared-statement fetch


【解决方案1】:

默认情况下,值类型为字符串。

您可以将其设置为这样的整数:

$stmt->bindParam(1, $row_start, PDO::PARAM_INT);

更新:

即使您将其强制为 INT,它仍将其作为字符串传递。

看看你的错误信息:

near ''0', 10' at line 1" }

特别是0之后的结尾',表示它是一个字符串。

0'

更新

需要手动对变量进行类型转换,即使您传递了预期的 PDO 类型:

$limit = (int) 1;
$limit2 = (int) 1;


$stmt = $pdo->prepare("SELECT * FROM Table LIMIT :limit, :offset");
$stmt->bindParam(":limit", $limit, PDO::PARAM_INT);
$stmt->bindParam(":offset", $limit2, PDO::PARAM_INT);
$stmt->execute();

【讨论】:

  • 是的,我认为这是因为我给了那个变量字符串值。
【解决方案2】:
$conn->prepare("SELECT * FROM table ORDER BY date DESC LIMIT ?");
$stmt->execute(array(10));

【讨论】:

猜你喜欢
  • 2010-11-30
  • 2010-11-05
  • 2014-03-12
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多