PHP mysqli oop从表中获取数据错误

PHP mysqli oop从表中获取数据错误,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,我想使用PHP-mysqli从我的表中只取一行。 它使用prepared语句,但我不能这样做,我的代码也没有显示任何内容。我该怎么办 <?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 post

我想使用PHP-mysqli从我的表中只取一行。 它使用prepared语句,但我不能这样做,我的代码也没有显示任何内容。我该怎么办

<?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);

您需要绑定结果,然后获取它们。由于您有
限制1
,因此不需要循环任何内容,因为您无论如何只能获取一行

请注意,我们现在选择一列,而不是
SELECT*
,在本例中,我们从
content
列中进行选择(在数据库表中显示时进行更改)。重要的是,所选列的数量与您在
mysqli\u stmt\u bind\u 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";
}

这是我在手机上写的,所以可能有一些错误。不过,文档中给出了很好的示例

注意:
mysqli
的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了
mysqli
API,不应在新代码中使用。是的,但我是PHP新手,没有编程经验。所以我害怕OOP(!),我就是不明白!关于“OOP”的五秒钟速成课程:
f($x,$y)
程序风格变成了面向对象形式的
$x->f(y)
,第一个参数是对象和调用函数的方式。OO的主要目的是让函数在“对象”上运行,而不是在任意参数上运行。将对象视为相关变量和函数的容器,可以像传递简单变量一样传递给ust。值得注意的是,PDO在接口方面要干净得多,因此,如果您目前还不太致力于
mysqli
,那么值得一试。命名占位符功能非常重要,另外,您可以将关联数组传递给
execute()
,这样代码就不那么麻烦了。更好的是像、、或这样的ORM,它不仅仅执行查询。数据库中有多少列?你需要把它们捆起来拿来谢谢。但什么是$content?我的意思是,我们没有在任何地方定义它……我编辑了代码,并通过@tadman将其更改为oop。和绑定结果,但打印尚未显示任何结果!啊哈。打印不会像mysql查询那样工作。感谢我的代码工作。
$content
mysqli\u stmt\u bind\u result()中定义。该函数与大多数函数不同,因为它实际上定义了一个变量。该变量保存已获取的列的值。