资讯专栏INFORMATION COLUMN

php发送Sql语句遇到的坑

light / 1636人阅读

摘要:坑一报的第一个错误是关于的这个报错字面意思是这个函数的参数应该接受一个的参数,但实际运行时,传进去的参数是一个布尔值。在我的代码中,是查询后的结果,我的代码应该看起来没有问题,而错误提示是一个布尔值,可能是我的查询语句出现了问题。

php发送Sql语句遇到的坑

标签: php


先在这里贴一下代码:

返回登陆页面";
        } 
    }else{
        echo "用户不存在";
        //echo "返回登陆页面";
    }
?>

作为一个php小白,写了40行代码,挖了不少坑,大家可以借助一下这段代码检验一下自己的水平,哈哈哈哈哈。
下面讲述的步骤,是我在逐渐解决的过程。

坑一: mysql_num_rows()

报的第一个错误是关于mysql_num_rows()的

mysql_num_rows() expects mysqli_result 1 to be resource,boolean given

这个报错字面意思是这个函数的参数应该接受一个resource的参数,但实际运行时,传进去的参数是一个布尔值。
作为一个学习的心态,还是应该先找一下关于这个函数的解释:

用法:int mysql_num_rows ( resource $result )
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()。

在我的代码中,$result是查询后的结果,我的代码应该看起来没有问题,而错误提示$result是一个布尔值,可能是我的查询语句出现了问题。

坑二:发送sql语句

现在php菜鸟教程中找了其返回值的情况:

针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE

看到这里,看到mysqli_result对象感觉看到了家人。觉得顿时有了头绪。
关于$link:
我在mysqli_query()中传入的参数$link其实是不对的,这个资源标识符是我登录数据库时候返回的,而不是选择数据时候返回的。而数据库才是我操作的对象,其中的逻辑千万要搞明白。

坑三:sql语句

最后的问题就是出在了这里。

先说一下php里的变量解析:

在单引号字符串中的变量和特殊含义的字符将不会被替换。
用双引号定义的 字符串 最重要的特征是变量会被解析

第一种情况:

$name = "lan";
echo "我是$name";

这在情况下,变量会被当作字符串处理,会输出

我是$name

$name = "lan";
echo "我是$name";

在这种情况下,变量会被解析,输出:

我是lan

详情参见玩转php变量解析

php中的{}

在我查找php拼接字符串的过程中,主要出现了两种方法,一个就是直接使用双引号进行变量解析,另外一种是使用.符号进行拼接。

双引号出现了一种写法:{$username} 让我有一些困惑,在这里也说一下其作用:

(1). 表示{}里面的是一个变量 ,执行时按照变量来处理

(2). 在字符串中引用变量使用的特殊包括方式,这样就可以不使用.运算符,从而减少代码的输入量了
(3). 防止变量名和后面的字符串连在一起

使用.拼接sql语句
这是我在mysql的phpMyAdmin中自动生成的查询语句

SELECT * FROM `user` WHERE `userName` LIKE "lan"

而这是我在运行的过程中输出的拼接后的字符串:

SELECT * FROM `user` WHERE `userName` LIKE lan

仔细一下观察一下可以看出输出的语句中最后lan是没有单引号的,这就是错误的根源了,可怜我一直没有看到。

最后拼接成了这个样子:

$check_query = "SELECT * FROM `user` WHERE `userName` LIKE".""".$username.""";
坑四:md5

md5() 函数计算字符串的 MD5 散列。主要用于加密.

调试到后面,前面的都能正确运行,但就是一直输出密码不对,想到,也许从数据库里读取的数据,也要进行md5处理才能和进过md5处理的密码比较,一试,果然对了。
其实可以在一开始注册的时候,就把密码md5加密储存在数据中。

总结

是时候好好看看调试方法了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21829.html

相关文章

  • CodeIgniter遇到的坑

    摘要:文件夹中的文件首字母大写。因为在中我没有找到日期和字符串转换和格式化的灵活方法,所以在中处理格式化的问题。获取参数由于框架自身设计的问题,推荐尽量用方式请求后台服务,参数格式为格式。 1.controllers文件夹中的controller文件首字母大写。不大写也可以,但是环境兼容性不好,举个例子,我开发环境在mac电脑上,文件名首字母小写,服务可以正常访问;但是在阿里云服务器(deb...

    andot 评论0 收藏0
  • PHP安全性防范方式

    摘要:注入注入是一种恶意攻击,用户利用在表单字段输入语句的方式来影响正常的执行。防范方式是针对非法的代码包括单双引号等,使用函数。如许多函数,如可以包含或文件名防范方式过滤用户输入在中设置禁用和。这将禁用的远程文件。 SQL注入 SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。 防范方式 使用mysql_real_escape_string(),或者...

    chadLi 评论0 收藏0
  • SegmentFault 技术周刊 Vol.42 - MySQL:从删库到跑路

    摘要:肖鹏微博数据库那些事儿肖鹏,微博研发中心技术经理,主要负责微博数据库相关的业务保障性能优化架构设计,以及周边的自动化系统建设。经历了微博数据库各个阶段的架构改造,包括服务保障及体系建设微博多机房部署微博平台化改造等项目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 对于手握数据库的开发人员来说,没有误删过库的人生是...

    aboutU 评论0 收藏0

发表评论

0条评论

light

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<