PHP和MySQLi将查询结果转换为字符串时出错


PHP and MySQLi Error Converting Query Results into String

我正在为学校做一项作业,其中包括使用PHP生成SQL结果表。转换查询结果时遇到问题。这是我的错误信息:

可捕获的致命错误:类mysqli_result的对象无法转换为字符串

这是我代码的相关部分:

$q = "SELECT pages.pageid,pages.pagetitle,pagetype.pagetypename,stylesheets.stylename
FROM pages
INNER JOIN stylesheets
ON pages.styleid=stylesheets.styleid
INNER JOIN pagetype
ON pages.pagetypeid=pagetype.pagetypeid
ORDER by pages.".$sortBy." ".$sortDirection;
print("<p>Query: ".$q."</p>'n");

$r = mysqli_query($db_link,$q);
$n = mysqli_num_rows($r);
print("<p>$r</p>");

我唯一的理论是,也许因为我使用了多个表的内部联接,所以我还需要做一些额外的事情?我运行了MySQL服务器中显示的查询代码,它运行良好,并返回了正确的结果。

问题是$r是一个对象,而不是字符串。您要打印$n的值,而不是$r的值。将print语句更改为以下内容以修复错误:

print("<p>$n</p>");

从问题的细节来看,不清楚您是在询问如何打印行数,还是如何打印查询的实际结果。

如果您尝试执行后者:mysqli_query()返回一个mysqli_result对象。返回的结果资源应传递给mysqli_fetch_array()mysqli_fetch_assoc()或其他处理结果表的函数,以访问返回的数据。

基本结构如下:

$r = mysqli_query($db_link,$q) or die(mysqli_error($db_link);
$n = mysqli_num_rows($r);
while ($row = mysqli_fetch_assoc($r)) {
    // use $row['key']
}

此外,我建议您在代码中使用更多描述性的变量名——这使代码易于维护和阅读。

在构造查询字符串时也应该更加小心。如果$sortBy来自用户输入,那么它就是SQL注入攻击的向量。

mysqli_query()返回一个结果集资源,该资源与结果集不同。您需要使用mysql_fetch_array()或类似工具检索数据。

$r = mysqli_query($db_link,$q) or die(mysqli_error($db_link);
$n = mysqli_num_rows($r);
while ($row = mysqli_fetch_array($r)) {
 var_dump($row);       // replace this with your own code to format the output
}

您的部分困惑是您使用了大量的1个字符的字符串,在我看来,这些字符串只会引起困惑&现在并没有真正受益于编码。对字符串使用实词&让你的生活和调试过程变得更容易。还有您的查询&结果似乎尚未解析。以下是我对使用面向对象处理风格的代码的看法:

$query = "SELECT pages.pageid,pages.pagetitle,pagetype.pagetypename,stylesheets.stylename
FROM pages
INNER JOIN stylesheets
ON pages.styleid=stylesheets.styleid
INNER JOIN pagetype
ON pages.pagetypeid=pagetype.pagetypeid
ORDER by pages.".$sortBy." ".$sortDirection;
print("<p>Query: ".$query."</p>'n");
$result = $db_link->query($query);
$number_of_rows = $result->num_rows($result);
while($row = $result->fetch_assoc()){
    print("<p>$row</p>");
}