最近在做一个app的项目,本地搭建了mysql和php,测试都没有问题,因为每次发送ajax都需要内网穿透,我就把本地的mysql和php导出并上传到了服务器,采用phpmyadmin来管理,谁知道在本地还正常的代码到了云端就报错了。
mysqli_query为空
运行php代码发现报错,大致的意思就是mysqli_query对象为空
1 |
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given |
代码是从一个数据表中查询出用户的数据,在本地查询完全没有任何问题,sql语句也是正常的
1 |
SELECT * FROM USER WHERE UserID='{$id}' |
mysqli_query在执行select语句的时候如果成功会返回结果集,失败则会返回false,我写了判断的时候发现mysqli_query返回false,没有返回结果集。
尝试的几种方法
1、公共连接类
我第一时间想到的是连接mysql的文件出问题了,写了个判断发现是连接成功的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php //定义连接mysql需要的变量 $db_host="localhost";//服务器 $db_username="logistics";//用户名 $db_password=123456; $db_name="logistics";//数据库 const db_port=3306;//端口 //连接mysql $k = mysqli_connect($db_host,$db_username,$db_password,$db_name); if($k==FALSE){ $str="mysql连接失败!".mysqli_connect_error (); //终止程序运行 die($str); }else{ //设置数据返回的编码格式 $charset="utf8"; mysqli_set_charset($k, $charset); } ?> |
mysqli_connect并没有返回false,证明连接文件并没有问题。
2、查询语句
公共连接文件是正确的,但是在查询页面出现mysqli_query为空的情况,让我不得不怀疑到sql语句本身,但是我用Sqlyog连接本地mysql查询又能查询出来。
我陷入了深深的迷茫中,不管是百度还是谷歌都没有人写到过这个问题,php版本冲突?还是数据库有问题?。
phpmyadmin解决
就在我快要被这个问题弄疯的时候,鬼使神差的来到phpmyadmin里面执行了一下sql语句,居然报错了!
报错的意思是说logistics.USER这个表不存在,why?本地执行可以,phpmyadmin执行就报错?难道是表名必须小写?
我尝试将大写的USER换成user,问题解决,结果查询出来了。
以前用sqlserver的时候表名我都是大小写不分的,突然换成mysql没反应过来。mysql的表名要全小写的。
2019年7月29日 下午1:20 沙发
学习了
2019年7月30日 上午9:20 1层
@搬瓦工 嗯嗯,哈哈