【问题标题】:SELECT query Prepared Statement outputSELECT 查询 Prepared Statement 输出
【发布时间】:2015-09-18 14:48:22
【问题描述】:

我还是新手,所以请原谅我的愚蠢错误。

目前我尝试从数据库外部选择一些东西。要么虽然没有输出。

$stmt = $mysqli->prepare("SELECT title FROM media");
$stmt->bind_param("s", $title);
$stmt->execute();
$stmt->bind_result($a);
$stmt->fetch();
printf("Title: ", $title, $a);
$stmt->close();

【问题讨论】:

  • 您正在绑定到不在您查询中的占位符? see the documentation
  • 嗯...绑定什么?就像WHERE which_column = ??? 一样,真的可以是任何东西。
  • SELECT title ... + $stmt->bind_param("s", $title); - 这听起来不对。是选择标题还是按标题区分?
  • undefined $title 注意,因为您的查询完全取决于它是否成功。

标签: php mysql mysqli prepared-statement


【解决方案1】:

为了能够从准备好的语句中输出一些东西,你必须先从数据库中选择一些东西。

如果你只想选择一个标题,那么你必须添加一个 WHERE 条件

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$stmt = $mysqli->prepare("SELECT title FROM media WHERE title=?");
$stmt->bind_param("s", $title);
$stmt->execute();
$stmt->bind_result($a);
$stmt->fetch();
echo "Title: $title : $a");
$stmt->close();

但您必须意识到条件应与数据库中存在的实际标题相匹配。否则不会打印任何内容。

如果要选择所有标题,则删除绑定并添加循环

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$stmt = $mysqli->prepare("SELECT title FROM media");
$stmt->execute();
$stmt->bind_result($a);
while ($stmt->fetch())
{
    echo "Title: $a";
}
$stmt->close();

应大众需求添加了最少的错误处理

【讨论】:

  • 在第一个代码中:在此之后我仍然没有输出(除了“标题:”)。在第二个代码处:与第一个代码的结果相同,只是它显示 3 次“标题:”,这是一件好事,因为数据库中有 3 条记录。还将 $title 更改为 $a,因为没有 $title 变量。两者都没有错误输出。
  • 好的,第二个代码我忘了把 printf 改成 echo(我的错)。第一个代码我改变了“title=?”到 "id=3" 并删除了 "$stmt->bind_param("s", $title);",这使它工作。感谢您的帮助。
【解决方案2】:

像这样将绑定参数添加到您的查询中:

$stmt = $mysqli->prepare("SELECT title FROM media WHERE title = ?");
$stmt->bind_param("s", $title);

更多信息请参见this

【讨论】:

  • 在此之后我仍然没有输出(除了“标题:”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多