PHP:使用 LIKE 选择器时防止 SQL 注入(inject)

标签 php mysql sql mysqli

我有一个 PHP 脚本,它使用 mysqli 使用非常简单的搜索语句。这是声明:

SELECT * FROM JobTracker WHERE JobName LIKE'%$jobName%'

现在我想防止 SQL 注入(inject),但我不知道语法。

我尝试过 LIKE '%?%'LIKE '%' 。 ? 。 '%'LIKE '%' + ? +“%”

但没有任何效果。这个可以防止注入(inject)的 SQL 语句的正确语法是什么?

最佳答案

你有两个选择:

  • 特殊字符 %_允许作为输入中的通配符:

    ... LIKE CONCAT('%', ?, '%')
    
  • 不应允许使用通配符:

    ... LIKE ?
    
    $jobName = '%'.str_replace(array("_","%"),array("\\_","\\%"),$jobName).'%';
    

关于PHP:使用 LIKE 选择器时防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24867280/

相关文章:

mysql - 优化 Messenger 的查询 sql

php - 获取sql查询的开始/结束时间

javascript - Laravel 5.3、Vue.js 2+ 无法使列表渲染 (v-for) 工作

php - 如何使用php获取字符串中以 '#'开头的单词?

mysql - 选择计费小时数和非计费小时数

mysql - 从带有约束的表中随机抽取 n 个元素

php - 设置 Mandrill 模板 Laravel

mysql - SQL 查询 : Separate column where IDs are the same but type is different

PHP 从 TextArea 中提取代码并传递到 Mysql SELECT IN 查询

MySQL 为什么在有索引时记录为慢查询/日志查询不使用索引?