【问题标题】:PHP mysqli oop fetch data from table errorPHP mysqli oop从表错误中获取数据
【发布时间】:2018-11-23 08:11:54
【问题描述】:

我想使用 PHP mysqli 从我的表中获取一行。 它使用准备好的语句,但我不能这样做,我的代码什么也没显示。我该怎么办?

<?php
require_once 'inc/db.inc.php';

$post_id = $_GET['id'];

$q = "SELECT post_id, post_name, post_title, post_content, post_author, post_short_des, post_tag, post_date FROM posts WHERE post_id=? LIMIT 1";
$stmt = $conn->prepare($q);
$stmt->bind_param('i', $post_id);
$stmt->execute();
$stmt->bind_result($post_id, $post_name, $post_title, $post_content, $post_author, $post_short_des, $post_tag, $post_date);
$stmt->fetch();

print_r($stmt);

【问题讨论】:

  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。
  • 是的,但我是 php 新手,我没有编程经验。所以我害怕 OOP(!),我就是不明白!
  • 关于“OOP”的五秒速成课程:f($x, $y) 程序风格变为面向对象形式的$x-&gt;f(y),第一个参数是对象以及如何调用函数。 OO 的主要推动力是您拥有对“对象”而不是任意参数进行操作的函数。将对象视为相关变量和函数的容器,您可以像传递简单变量一样在我们周围传递。
  • 值得注意的是,PDO 在界面方面要干净得多,所以如果您到目前为止还不太热衷于mysqli,那么值得一试。命名占位符功能很重要,而且您可以将关联数组传递给execute(),这使代码变得不那么繁琐。更好的是像 DoctrinePropelRedBeanPHPEloquent 这样的 ORM,它们不仅仅运行查询。
  • 您的数据库中有多少列?您需要绑定并获取它们

标签: php mysql database mysqli


【解决方案1】:

您需要绑定结果,然后获取它们。因为你有LIMIT 1,所以不需要循环任何东西,因为无论如何你只会获取一行。

请注意,我们现在选择一列,而不是 SELECT *,在此示例中,我们从列 content 中选择(更改它出现在您的数据库表中)。所选列的数量必须与您在mysqli_stmt_bind_result() 中绑定的变量相匹配,这一点很重要。您可以选择多个列,只需用逗号分隔。

$post_id = $_GET['id'];

$q = "SELECT content FROM posts WHERE post_id=? LIMIT 1";
$stmt = mysqli_prepare($dbc, $q);
mysqli_stmt_bind_param($stmt, 'i', $post_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $content);
mysqli_stmt_fetch($stmt);

if (mysqli_stmt_num_rows($stmt)) {
    echo $content;
} else {
    echo "No data";
}

我是用手机写的,所以可能有一些错误。该文档虽然显示了很好的示例。

【讨论】:

  • 谢谢。但什么是 $content ?我的意思是我们没有在任何地方定义它......
  • 感谢@tadman,我已编辑代码并将其更改为 oop。并绑定结果,但 print_r 尚未显示任何结果!
  • 啊哈。 print_r 不会像 mysql 查询那样工作。感谢我的代码有效。
  • $contentmysqli_stmt_bind_result() 中定义。该函数与大多数函数不同,因为它实际上定义了一个变量。该变量保存被提取的列的值。
猜你喜欢
  • 2013-11-16
  • 2013-10-14
  • 1970-01-01
  • 2016-04-11
  • 2016-08-31
  • 2014-01-11
  • 1970-01-01
  • 2014-09-19
  • 2015-03-25
相关资源
最近更新 更多