作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个试图从 MySQL 表中获取一些行的 PHP 片段:
$connect = dbconn(PROJHOST,'dbcontext', PROJDBUSER, PROJDBPWD);
$sql= "SELECT contextleft, contextright
FROM tblcontext
WHERE contextleft REGEXP '[[:<:]]:word[[:>:]]'
LIMIT 0, 10";
$xleft = array();
$xright = array();
$countrows = 0;
$query = $connect->prepare($sql);
$query->bindParam(':word', $term);
if($query->execute()) {
$rows = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
$xleft[$countrows] = $row['contextleft'];
$xright[$countrows] = $row['contextright'];
$countrows++;
}
$notfound = null;
}
我认为上面代码中的以下行有问题:
$sql= "SELECT contextleft, contextright FROM tblcontext WHERE contextleft REGEXP '[[:<:]]:word[[:>:]]' LIMIT 0, 10";
基本上,我需要运行一个匹配单词的正则表达式(由 :word 占位符绑定(bind))并返回匹配记录。该代码在其他方面很好,因为它可以在没有正则表达式的情况下工作。但是不知何故,当我使用正则表达式时它拒绝返回任何东西。我在正则表达式中使用占位符参数的方式有问题吗?
简而言之,我的问题是如何在正则表达式中使用绑定(bind)占位符?
附加信息:该表名为 tblcontext,结构如下:
Engine MyISAM
sn: int(11), auto-increment, primary key
contextleft: varchar(190), fulltext index, unique
contextright: varchar(190), fulltext index, unique
当用户输入时应该匹配的一些随机示例,例如,fly:
I want to fly
To fly is easy
She will never fly because she is too heavy
当用户输入 fly 时不应匹配的一些随机示例:
Flying is easy
There is a blowfly on your food
She has been flying since last night
我不能对上述示例使用全文搜索,因为它仅适用于大于 3 个字符的搜索字符串。
最佳答案
除非您指定不带引号的数据类型(例如 PDO::PARAM_INT
),否则您注入(inject)的字符串将被引号。由于您不想在正则表达式模式(已经用引号引起来)中添加引号,因此您需要将整个模式放入绑定(bind)参数中。
$connect = dbconn(PROJHOST,'dbcontext', PROJDBUSER, PROJDBPWD);
$sql= "SELECT contextleft, contextright
FROM tblcontext
WHERE contextleft REGEXP :word
LIMIT 0, 10";
$xleft = array();
$xright = array();
$countrows = 0;
$query = $connect->prepare($sql);
$word = "[[:<:]]".$term."[[:>:]]";
$query->bindParam(':word', $word, PDO::PARAM_STR);
if($query->execute()) {
$rows = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
$xleft[$countrows] = $row['contextleft'];
$xright[$countrows] = $row['contextright'];
$countrows++;
}
$notfound = null;
}
关于php - MySQL PDO : Using bound placeholder within a regular expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771957/
我是一名优秀的程序员,十分优秀!