Fatal error: Call to a member function fetch_array() on a non-object 错误

php中文网
发布: 2016-06-20 12:49:34
原创
2276人浏览过

include_once ('conn.php');//error_reporting(0);@$shops_name= $_GET["shops_name"];if (isset($shops_name)) {	echo $shops_name;		$query = "SELECT * FROM goods WHERE ShopName= '$shops_name'";	@$q = $conn->query($query);		while($row=$q->fetch_array()) {				$select[]=array("goods_id"=>$row[ID],"goods_name"=>$row[Name]);			}	echo json_encode($select);}
登录后复制


将@query 复制到mysql查询成功。可是在这里失败了,求解。

Clippah
Clippah

AI驱动的创意视频处理平台

Clippah 202
查看详情 Clippah

回复讨论(解决方案)

贴出你的 conn.php

$conn = new mysqli("localhost","root","zxfang","test02");
if (!$conn) {
die("连接数据库失败:".mysqli_connect_error());


$conn->query("set character set 'gbk'");
$conn->query("set names 'gbk'");
?>

$q = $conn->query($query);
echo $q = $conn->error;

$q = $conn->query($query);
echo $q = $conn->error;



Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '=

什么意思??

修改表字段编码后没有 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '=  了,可还是Fatal error: Call to a member function fetch_array() on a non-object 

@$q = $conn->query($query);
改为
$q = $conn->query($query) or die($conn->error);

看看有什么错误输出。

估计你的sql执行有问题。

@$q = $conn->query($query);
改为
$q = $conn->query($query) or die($conn->error);

看看有什么错误输出。

估计你的sql执行有问题。


原表有
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '=' 错误。
表字段编码改成gbk后  $conn-error就没错误输出了,可还是有Fatal error: Call to a member function fetch_array() on a non-object 。

不要随意的修改有数据的表的字符集,因为修改字符集的动作并不会同时修改内容的字符集
请改回盐来得字符集设置,以免数据丢失!

$query = "SELECT * FROM goods WHERE ShopName= '$shops_name'";

echo base64_encode($query);
贴出结果(当然是要是出错时候的)

不要随意的修改有数据的表的字符集,因为修改字符集的动作并不会同时修改内容的字符集
请改回盐来得字符集设置,以免数据丢失!

$query = "SELECT * FROM goods WHERE ShopName= '$shops_name'";

echo base64_encode($query);
贴出结果(当然是要是出错时候的)


U0VMRUNUICogRlJPTSBnb29kcyBXSEVSRSBTaG9wTmFtZT0gJ+W6lzEn

echo base64_decode('U0VMRUNUICogRlJPTSBnb29kcyBXSEVSRSBTaG9wTmFtZT0gJ+W6lzEn');
登录后复制

gbk 环境中: SELECT * FROM goods WHERE ShopName= '搴?1'
utf-8 环境中: SELECT * FROM goods WHERE ShopName= '店1'
显然你传入的就是 utf-8 编码的数据
你还当做 gbk 编码处理($conn->query("set names 'gbk'");)能不出错吗?

哦,原来是这样,我对于编码一直都不是很了解。
好了,问题解决了,谢谢版主。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号