gpt4 book ai didi

php - MySQL PDO : Using bound placeholder within a regular expression

转载 作者:行者123 更新时间:2023-11-29 05:14:39 27 4
gpt4 key购买 nike

这是一个试图从 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com