php新手求教查询数据库无输出的问题。Notice: Trying to get property of non-object in ……

liux98 2017-11-14 11:02:02
提示错误信息是:
Notice: Trying to get property of non-object in D:\ruanjiananzhuang\wamp\www\n2000\results.php on line 49

对应代码是:$num_results = $result->num_rows;

Fatal error: Call to a member function free() on a non-object in D:\ruanjiananzhuang\wamp\www\n2000\results.php on line 69

对应代码是: $result->free();

请各位前辈帮小弟看看问题出在哪里

以下是完整代码:
<html>
<head>
<meta charset="utf-8">
<title>资源查询结果</title>
</head>
<body>
<h1>资源查询结果</h1>
<?php
// create short variable names
$searchtype=$_POST['searchtype'];
$searchterm=trim($_POST['searchterm']);

if (!$searchtype || !$searchterm) {
echo '您尚未输入搜索内容,请返回重新输入!';
exit;
}


// echo " $searchtype</br>";
// echo " $searchterm</br>";


if (!get_magic_quotes_gpc()){
$searchtype = addslashes($searchtype);
$searchterm = addslashes($searchterm);
}

// echo " $searchtype</br>";
// echo " $searchterm";

@ $db = new mysqli('localhost', 'root', '', 'test');

if (mysqli_connect_errno()) {
echo '错误:连接数据库失败,请重试!';
exit;
}

$query = "select * from haoma where ".$searchtype." like '%".$searchterm."%'";


?>
<table width="980">
<tr>
<th>用户号码</th><th>设备标识</th>
<?php
$result = $db->query($query);

$num_results = $result->num_rows;

echo "$result</br>";
echo "$num_results</br>";

echo "<p>查询到的数据条目: ".$num_results."</p>";

for ($i=0; $i <$num_results; $i++) {
$row = $result->fetch_assoc();
echo "<p><strong>".($i+1).". 用户号码: ";
echo htmlspecialchars(stripslashes($row['用户号码']));
echo "<br />设备标识: ";
echo stripslashes($row['设备标识']);
echo "</p>";
}

$result->free();
$db->close();

?>
</table>
</body>
</html>
...全文
904 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
liux98 2017-11-18
  • 打赏
  • 举报
回复
引用 18 楼 github_39437588 的回复:
[quote=引用 17 楼 liux98 的回复:] [quote=引用 16 楼 小白V587的回复:]where 的列名不加单引号试试
问题解决了,能得到想要的结果!灰常感谢!!! 就是不知道为什么要这样,能大概说明下吗?[/quote] 字段的列名是不能加引号的,要加的话也只能加反引号。[/quote] 非常感谢!
一起混吧 2017-11-17
  • 打赏
  • 举报
回复
看你的sql中 '用户号码' 字段名两边的转义字符还是用了单引号呢 应为 select * from haoma where convert(`用户号码`,chart()) like '%8590240%' 把这句sql放到命令行下执行也没有结果吗
小白V587 2017-11-17
  • 打赏
  • 举报
回复
引用 17 楼 liux98 的回复:
[quote=引用 16 楼 小白V587的回复:]where 的列名不加单引号试试
问题解决了,能得到想要的结果!灰常感谢!!! 就是不知道为什么要这样,能大概说明下吗?[/quote] 字段的列名是不能加引号的,要加的话也只能加反引号。
liux98 2017-11-17
  • 打赏
  • 举报
回复
引用 16 楼 小白V587的回复:
where 的列名不加单引号试试
问题解决了,能得到想要的结果!灰常感谢!!! 就是不知道为什么要这样,能大概说明下吗?
小白V587 2017-11-17
  • 打赏
  • 举报
回复
where 的列名不加单引号试试
liux98 2017-11-16
  • 打赏
  • 举报
回复
引用 13 楼 jordan102 的回复:
可能跟你中文字段名有关,换成英文字段试试看
改完结果还是一样的,好苦恼
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:  多谢版主的耐心解答!

现在不报错了,但是查询结果一直是0。这可能是哪里出问题了呢?

select * from haoma where convert('用户号码',chart())  like '%8590240%'
一起混吧 2017-11-16
  • 打赏
  • 举报
回复
可能跟你中文字段名有关,换成英文字段试试看
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
$result = $db->query($query) or die($db->error()); 判错是必须的
改完后提示错误这条代码出错 :$result = $db->query($query) or die($db->error()); Fatal error: Call to undefined method mysqli::error() in D:\ruanjian\wamp64\www\n2000\results.php on line 31
xuzuning 2017-11-15
  • 打赏
  • 举报
回复
$result = $db->query($query) or die($db->error()); 判错是必须的
飞翔的小鸟s 2017-11-15
  • 打赏
  • 举报
回复
打印一下query语句看看
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
$query = "select * from haoma where `$searchtype` like '%$searchterm%'";


多谢版主的耐心解答!

现在不报错了,但是查询结果一直是0。这可能是哪里出问题了呢?

select * from haoma where '用户号码' like '%8590240%'
查询到的数据条目: 0
我的数据库如下:

xuzuning 2017-11-15
  • 打赏
  • 举报
回复
$query = "select * from haoma where `$searchtype` like '%$searchterm%'";
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 7 楼 liux98 的回复:
[quote=引用 5 楼 xuzuning 的回复:] $result = $db->query($query) or die($db->error()); 改为 $result = $db->query($query) or die($db->error); 打印出来query语句:select * from ziyuan where 用户号码 like '%8590240%' 显然 用户号码 不是字段名 即便表中有名为 用户号码 的字段,书写时也应转义:`用户号码` ·
对的,我确实表里有“用户号码”字段名,如果是对其进行转义的话应该怎样用语句进行表达呢? $query = "select * from haoma where ' ".$searchtype." ' like '%".$searchterm."%'"; 这样对吗?[/quote] 修改完后query语句打印结果是: select * from haoma where '用户号码' like '%8590240%' 现在提示的错误信息如下: Catchable fatal error: Object of class mysqli_result could not be converted to string in D:\ruanjiananzhuang\wamp\www\n2000\results.php on line 51 对应语句为: echo "$result</br>";
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 6 楼 qq_20117715 的回复:
如版主所说,sql语句错了,用户号码不是数据库表字段
我的query语句应该怎样修改才是对的呢?初学,确实不太明白,还望不吝赐教
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
$result = $db->query($query) or die($db->error()); 改为 $result = $db->query($query) or die($db->error); 打印出来query语句:select * from ziyuan where 用户号码 like '%8590240%' 显然 用户号码 不是字段名 即便表中有名为 用户号码 的字段,书写时也应转义:`用户号码` ·
对的,我确实表里有“用户号码”字段名,如果是对其进行转义的话应该怎样用语句进行表达呢? $query = "select * from haoma where ' ".$searchtype." ' like '%".$searchterm."%'"; 这样对吗?
飞翔的小鸟s 2017-11-15
  • 打赏
  • 举报
回复
如版主所说,sql语句错了,用户号码不是数据库表字段
xuzuning 2017-11-15
  • 打赏
  • 举报
回复
$result = $db->query($query) or die($db->error()); 改为 $result = $db->query($query) or die($db->error); 打印出来query语句:select * from ziyuan where 用户号码 like '%8590240%' 显然 用户号码 不是字段名 即便表中有名为 用户号码 的字段,书写时也应转义:`用户号码` ·
liux98 2017-11-15
  • 打赏
  • 举报
回复
引用 1 楼 qq_20117715 的回复:
打印一下query语句看看
能正常打印出来query语句:select * from ziyuan where 用户号码 like '%8590240%'

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧