Replace 将php中的空白替换为%
我需要修改默认的prestashop db查询。我尝试了以下方法:Replace 将php中的空白替换为%,replace,whitespace,sign,Replace,Whitespace,Sign,我需要修改默认的prestashop db查询。我尝试了以下方法: public function ajaxProcessCheckProductName() { if ($this->tabAccess['view'] === '1') { $search = Tools::getValue('q'); /* in this variable, i wish subsitute the space with % */ $searchmod
public function ajaxProcessCheckProductName()
{
if ($this->tabAccess['view'] === '1')
{
$search = Tools::getValue('q'); /* in this variable, i wish subsitute the space with % */
$searchmod = str_replace(" ", "%", $search);
$id_lang = Tools::getValue('id_lang');
$limit = Tools::getValue('limit');
$result = Db::getInstance()->executeS('
SELECT DISTINCT pl.`name`, p.`id_product`, pl.`id_shop`
FROM `'._DB_PREFIX_.'product` p
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = '.(int)$id_lang.')
WHERE pl.`name` LIKE "%'.pSQL($searchmod).'%"
GROUP BY pl.`id_product`
LIMIT '.(int)$limit);
die(Tools::jsonEncode($result));
}
}
我希望用%替换变量中的空格,比如kawasaki racing filter
示例:用户搜索川崎赛车过滤器
,我希望将其替换为川崎%racing%过滤器
,因此,查询将为%kawasaki%racing%过滤器%
这种方法似乎正确吗?它现在不起作用:(
有人能帮我吗?提前谢谢!确保你的工具::getValue不会返回html字符串,例如在你的例子中。在你的工具:getValue中尝试var_Dump,看看真正的输出是什么。确保你的工具::getValue不会返回html字符串,例如在你的例子中尝试var_Dump。在你的工具中尝试var_Dump:getValue和查看实际输出。它不适用于您的最可能原因是,如果您在数据库中搜索
%kawasaki%racing%filter%
,它将按顺序搜索包含所有这些单词的条目
我的直觉是,您希望它在字符串中的任何位置都能找到包含这三个单词的条目,但您这样做的方式意味着它们必须按照在查询中输入的相同顺序出现
最好将字符串拆分为单独的单词,并独立搜索每个单词
乙二醇
这将搜索包含所有三个单词但顺序不限的记录。如果要查找这些单词中的任何一个,而不是所有三个,请将和替换为或
此外:
- 如有必要,请不要忘记转义输入字符串。(即,防止SQL注入攻击,以及在输入包含引号字符时防止查询中断等)
- 如果可能的话,我建议在查询中避免使用通配符。特别是在字符串的开头。这是因为通配符会使查询非常慢(数据库必须读取每一条记录,并为每一条记录解析相关字段的全部内容:这是对单个表执行的最慢查询,如果同时执行
JOIN
s,则情况会更糟)
在某些情况下,通配符搜索很有用,但如果需要进行大量文本搜索,MySQL(和其他数据库;您没有指定使用的数据库系统)确实有其他选项
最简单的选择是将关键字存储在一个单独的表中。您可以将它们看作标记。然后您可以直接查询确切的单词
如果您需要更多,您可以查看MySQL,它可以被看作是减缓通配符搜索速度的直接替代品
但即使这样有时也会很慢,所以如果你真的想要快,那么就去看看。这需要做更多的工作,但是做得好,它会让你的搜索速度非常快。最可能的原因是,如果你在数据库中搜索%kawasaki%racing%filter%
,它会搜索包含所有这些工作的条目ds,按那个顺序
我的直觉是,您希望它在字符串中的任何位置都能找到包含这三个单词的条目,但您这样做的方式意味着它们必须按照在查询中输入的相同顺序出现
最好将字符串拆分为单独的单词,并独立搜索每个单词
乙二醇
这将搜索包含所有三个单词但顺序不限的记录。如果要查找这些单词中的任何一个,而不是所有三个,请将和替换为或
此外:
- 如有必要,请不要忘记转义输入字符串。(即,防止SQL注入攻击,以及在输入包含引号字符时防止查询中断等)
- 如果可能的话,我建议在查询中避免使用通配符。特别是在字符串的开头。这是因为通配符会使查询非常慢(数据库必须读取每一条记录,并为每一条记录解析相关字段的全部内容:这是对单个表执行的最慢查询,如果同时执行
JOIN
s,则情况会更糟)
在某些情况下,通配符搜索很有用,但如果需要进行大量文本搜索,MySQL(和其他数据库;您没有指定使用的数据库系统)确实有其他选项
最简单的选择是将关键字存储在一个单独的表中。您可以将它们看作标记。然后您可以直接查询确切的单词
如果您需要更多,您可以查看MySQL,它可以被看作是减缓通配符搜索速度的直接替代品
但是即使这样有时也会很慢,所以如果你真的想快速,那么就去看看。这需要更多的工作,但是做得好,它会让你的搜索速度非常快。Hi@underpaid\u pedro!问题是我无法打印变量。。但我只是尝试修改查询,比如:$searchmod=str\u replace(“,”%,$search);
但它不起作用:(Hi@underpaid\u pedro!问题是我无法打印变量..但我只是尝试修改查询,如:$searchmod=str\u replace(“,”%,$search);
但它不起作用:(在SQL中使用通配符时要非常小心。通配符会严重减慢查询速度。如果您的数据库很大,这将非常缓慢。除非绝对必要,否则不要使用它们。在SQL中使用通配符时要非常小心。通配符会严重减慢查询速度。如果您的数据库很大,这将非常缓慢。除非绝对必要,否则不要使用它们。)Y
... WHERE field LIKE '%kawasaki%'
AND field LIKE '%racing%'
AND field LIKE '%filter%'