我正在为学校做作业,其中涉及使用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服务器中显示的代码,它工作正常,并返回正确的结果。
答案 0 :(得分:2)
问题是$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注入攻击的向量。
答案 1 :(得分:1)
你的一部分困惑在于你使用了很多1个字符串 - 在我的诚实意见中 - 只是造成混乱和现在不是真正有利于编码。使用真实的单词作为字符串&amp;让您的生活和调试过程更容易。还有你的查询&amp;结果似乎没有被解析。以下是我使用面向对象的处理方式对代码的看法:
$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>");
}
答案 2 :(得分:1)
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
}