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

时间:2013-12-09 20:33:38

标签: php mysql database string mysqli

我正在为学校做作业,其中涉及使用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服务器中显示的代码,它工作正常,并返回正确的结果。

3 个答案:

答案 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
}