没人问update的$keyAndvalues[]=后面key用的 ` value用的‘吗?

来源:7-6 MySQL操作类之更新数据

坚持MyDream

2017-02-27 17:07

$keyAndvalues[]="`" . $key . "`" . "=" . "'" . $value . "'");  这里$value被 ' 包括而不是 ` ,这里的$value 不需要对特殊字符进行转义吗

写回答 关注

4回答

  • 金泽城
    2017-03-03 00:08:26
    已采纳

    因为sql中只有库名、表名、字段名可能会与sql关键字冲突,而 ` 这个字符在上面这行代码里就是把字段名括起来,从而避免冲突,至于 value 不需要转义,是的,没错,value 的内容是值,sql在处理值时是不会和关键字冲突的。

    坚持MyDr...

    非常感谢!

    2017-03-03 00:14:38

    共 1 条回复 >

  • PengCheng
    2017-03-10 22:12:03

    嗯嗯。泽成的补充是对的。这个教程好像有个全局过滤。记不太清楚了。

    坚持MyDr...

    好的,老师

    2017-03-21 18:07:54

    共 1 条回复 >

  • 慕移动9181930
    2022-03-24 14:20:46
  • 金泽城
    2017-03-03 11:51:48

    回复 坚持MyDream:不客气,顺便补充说明一下,对于value来说,sql本身是没啥问题的,但是PHP就有问题了,比如就拿教程里面的这种方式,把变量 $value 里的字符串直接拼接成为 sql 语句,就会存在很大的安全隐患,举个例子,假设你开发一个密码登录的接口,$value1 里存的是用户账号,$value2 里存的是用户密码,sql语句是这样子拼的:

    $sql = "select * from user where `account` = '".$value1."' and `password` = '".$value2."'";

    如果遇到恶意用户,他在登录时把密码填成  123456' or '1' = '1 ,想一下,你最后会得到什么样的sql语句,是不是

    select * from user where `account` = 'zhangsan' and `password` = '123456' or '1' = '1'

    于是只要 '1' = '1' 成立,sql语句就能执行成功。。。

    是不是很可怕?这就叫做 sql 注入,是一种很古老的黑客攻击手段,所以现在一般会用 addslashes 对用户提交的内容进行转义,把那些可能会导致sql注入的关键字给替换掉。

    坚持MyDr...

    恩恩,这个倒是知道了,不过写出来看到这的人 都会懂!

    2017-03-03 13:04:12

    共 1 条回复 >

MVC架构模式分析与设计

通过学习MVC理论知识,由浅入深带您实现人生第一个MVC框架

82396 学习 · 929 问题

查看课程

相似问题