Php 强迫;默示和;而不是",;暗示或;在mysql中布尔匹配?

Php 强迫;默示和;而不是",;暗示或;在mysql中布尔匹配?,php,mysql,Php,Mysql,在mysql布尔匹配中,如果不存在运算符,则表示存在或暗示。如果你想要和,你需要在每个关键词中添加+ 所以查询“word1 word2”等于“word1或word2”,“+word1+word2”等于“word1和word2” 我不希望用户必须在每个关键字前输入+,我的选项是什么 建议选项1:my.conf中是否有可以更改以设置默认值的内容(我没有找到任何内容) 建议的选项2:解析查询并手动向每个单词添加+。有什么简单的代码可以分享吗 问题是,如果用户添加了“引号”或运算符(+-*)等,就会破坏

在mysql布尔匹配中,如果不存在运算符,则表示存在或暗示。如果你想要和,你需要在每个关键词中添加+

所以查询“word1 word2”等于“word1或word2”,“+word1+word2”等于“word1和word2”

我不希望用户必须在每个关键字前输入+,我的选项是什么

建议选项1:my.conf中是否有可以更改以设置默认值的内容(我没有找到任何内容)

建议的选项2:解析查询并手动向每个单词添加+。有什么简单的代码可以分享吗


问题是,如果用户添加了“引号”或运算符(+-*)等,就会破坏我的解析代码

我不知道你的意思,但这里有一个例子,说明如何在每个单词前面加上+

$s = "a string with several words in it";
$words = preg_split('/\s+/',$s,null,PREG_SPLIT_NO_EMPTY);
if (count($words)) {
    $str = '+' . implode(' +',$words);
}

我不确定你的意思,但这里有一个例子,说明你如何在每个单词前面加上+

$s = "a string with several words in it";
$words = preg_split('/\s+/',$s,null,PREG_SPLIT_NO_EMPTY);
if (count($words)) {
    $str = '+' . implode(' +',$words);
}

我在我的网站上提出了第二条建议

如果只处理单词(不处理带引号的字符串),则在每个单词前添加+的简单一行

甚至更简单的regex替换也可以这样做:

echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);
如果您不仅要搜索单个单词,而且还要搜索带引号的短语,则应在每个带引号的单词和字符串前添加+

echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);

我在我的网站上提出了第二条建议

如果只处理单词(不处理带引号的字符串),则在每个单词前添加+的简单一行

甚至更简单的regex替换也可以这样做:

echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);
如果您不仅要搜索单个单词,而且还要搜索带引号的短语,则应在每个带引号的单词和字符串前添加+

echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);

除了编辑源代码之外,在布尔模式下没有运算符就无法更改全文匹配的行为。您必须以某种形式使用选项2(如其他选项所示)。如果搜索表达式来自用户,请小心操作。

在布尔模式下,除了编辑源之外,没有任何方法可以更改全文匹配的行为,没有运算符。您必须以某种形式使用选项2(如其他选项所示)。如果搜索表达式来自用户,请小心操作。

谢谢,但这是我想到的第一件事,有点过分,第二种形式只有一个preg\u replace调用更好我同意,但是我更喜欢第一个的概念,第二个regexp在一个词的前缀已经是“+”时也可以使用。对于第一种情况,
(\\W |^)
可以替换为
\b
,除非字符串包含非ASCII字母(如Ned注释:)。OP可能知道这一点,但在单引号字符串中转义反斜杠是不必要的,除非它在单引号之前或有一系列反斜杠,尽管这样做并不坏。Kamil…你的第三个建议非常有效…火鸡节快乐!谢谢,但这是我想到的第一件事,有点过分了,第二种形式只有一个preg_replace调用要好得多。我同意,但我更喜欢第一种形式的概念。第二种regexp在单词前缀为“+”时也能工作。对于第一种情况,
(\\W |^)
可以替换为
\b
,除非字符串包含非ASCII字母(如Ned注释:)。OP可能知道这一点,但在单引号字符串中转义反斜杠是不必要的,除非它在单引号之前或有一系列反斜杠,尽管这样做并不坏。Kamil…你的第三个建议非常有效…火鸡节快乐!