开发者社区> 问答> 正文

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

Q1:以下代码是正确的吗?即表名和列名也可以用参数化导入吗?

$sqlLink = init_mysql();
$stmt = $sqlLink->stmt_init()
$sql = 'SELECT ? FROM ?;';
$stmt->prepare($sql);
$stmt->bind_param("ss",'colA','tableA');
$stmt->execute();
Q2:参数化防止注入,如何进行模糊查询?
1.sql = 'SELECT * FROM tableA WHERE col LIKE \'%?%\'';
2.sql = "SELECT * FROM tableA WHERE col LIKE '%?%'";
3.sql = 'SELECT * FROM tableA WHERE col LIKE \'%'.'?'.'%\'';

以上方式我经过尝试都不能使用,请问带%模糊查询如何书写SQL的prepare语句?
有一种可行的方式如下:
sql = 'SELECT * FROM tableA WHERE col LIKE '%'.$string.'%'';
但是失去了防注入的意义,请问有没有正确的方式给予我引导?:-D

展开
收起
a123456678 2016-07-01 11:25:35 2686 0
1 条回答
写回答
取消 提交回答
  • $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options);
    $query = $database->prepare('SELECT * FROM table WHERE  name LIKE :name');
    $query->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
    $query->execute();
    while ($results = $query->fetch())
    {
       echo $results['name'];
    }
    2019-07-17 19:49:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载

相关镜像