开发者社区> 问答> 正文

php连接Mysql 用stmt防注入如何进行模糊查询

表名和列名也是否可以用参数化导入像这样
1
参数化防止注入模糊查询:
1
经过尝试都不能使用,请问带%模糊查询如何书写SQL的prepare语句?
有一种可行的方式如下:
sql = 'SELECT * FROM tableA WHERE col LIKE '%'.$string.'%'';
但是失去了防注入的意义,请问有没有正确的方式

展开
收起
蛮大人123 2016-02-08 13:07:04 2844 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    不能。
    原来的prepare引入的目的,是为了预编译,生成执行计划,从而提高性能。本意可不是为了防止sqlinject。如果table都没有了,是无法预编译的。就没有意义了。
    $sql = "SELECT * FROM tableA WHERE col LIKE CONCAT('%',?,'%')";
    涉及到的是 PHP Binding a Wildcard 的知识。如果不bind parameter。可以直接拼接字符串。对引入的参数,都做一个escape就安全了。(函数: mysql_real_escape_string)

    2019-07-17 18:39:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像