Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在不带纯文本的mysql字段描述中搜索html文本中的单词_Php_Html_Mysql_Wysiwyg_Dolibarr - Fatal编程技术网

Php 在不带纯文本的mysql字段描述中搜索html文本中的单词

Php 在不带纯文本的mysql字段描述中搜索html文本中的单词,php,html,mysql,wysiwyg,dolibarr,Php,Html,Mysql,Wysiwyg,Dolibarr,我正在修改dolibarr中的代码,我遇到了一个问题,即使用WYSIG编辑器(记录html文本)在产品描述中进行搜索。搜索包含多个单词的描述在(可能是所有标记)之后不起作用,或者在文本的最开头,第一个单词不返回描述。另外,“galvanisé”和“é”一起使用,而不是带引号的“d'options”。见以下示例: 我试着使用htmlentities并包含标签的结束或开始(见下文) 说明: 过滤标准avec tout un tas d'options 900x400x116名称 22EN779-20

我正在修改dolibarr中的代码,我遇到了一个问题,即使用WYSIG编辑器(记录html文本)在产品描述中进行搜索。搜索包含多个单词的描述在
(可能是所有标记)之后不起作用,或者在文本的最开头,第一个单词不返回描述。另外,“galvanisé”和“é”一起使用,而不是带引号的“d'options”。见以下示例:

我试着使用htmlentities并包含标签的结束或开始(见下文)

说明:

过滤标准avec tout un tas d'options 900x400x116
名称 22
EN779-2002

for($i=0;$i'.$tabMots[0].%\'或p.description,如\'>'.$tabMots[0].'.htmlEntitys($tabMots[0])。%\';
}否则{
如果(是数字($tabMots[$i])){
$sql.='AND(p.description如\'%'。$tabMots[$i].%\'或p.description如\'>'.$tabMots[$i].%\'或p.description如\'''>'.%\'。$tabMots[$i].%\'或p.description如\''%>'.$tabMots[$i].'''.htmlentities($tabMots[$i.]].]].%');
}
}
}
为了不修改dolibarr数据库,我希望避免添加纯文本字段。谢谢

编辑:建议的答案是不好的,因为问题是文本描述的文本格式HTML而不是搜索标准。

我认为您的错误将在于
'
登录word
d'options
在SQL引擎中转义字符串

$tabMots[0] = "d'options";
$sql.= ' WHERE (p.description LIKE \'% '.$tabMots[0].'%\'';
echo $sql;

以上内容将打印出以下内容:

WHERE(p.description,如'%d'options%'
即使从StackOverflow高亮显示中,您也可以看到SQL引擎从中得到了什么

我强烈建议您切换到准备好的声明。请在此处阅读:

编辑

如何切换到准备好的语句?示例:

$param = $tabMots[$i];
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();

从这个答案复制粘贴:

对于那些没有思考就输入-1的人,我想说,准备好的查询并没有解决我的问题,因为它正在格式化搜索的单词。这里的问题是描述文本的格式,我做了研究,在插入
htmlentities()后看到了这一点 保留\n和其他字符。但是,我不知道文本开头保留的字符。感谢帮助我实现了准备好的查询。因此,
如果您想在%和单词“%\n”。$word.%”之间留一个空格,则必须添加对插入的
的搜索。这里有前面带有
的单词的词根。

和一行的第一个单词。它可以编辑什么?希望这能回答您的问题我知道准备好的语句谢谢。我想我没用,因为没有安全问题。您知道吗k它也可以解决我的第一个单词问题吗?我会尝试一下。更简单的否?$resql=$db->prepare($sql);$resql=$db->execute($tabMots);对不起,但是对于dolibarr 10中的DoliDB类的db,没有prepare函数。我想我必须复制纯文本字段,并用product修改dolibarr行为。可能是
$param = $tabMots[$i];
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();