gpt4 book ai didi

mysql - 使用Perl在mysql中使用空格查询字符串

转载 作者:行者123 更新时间:2023-11-29 01:12:02 24 4
gpt4 key购买 nike

我认为这个问题是针对 php 提出的,现在我针对 perl 提出了这个问题。我有 2 个数组。我正在使用它来查询我的数据库。现在碰巧这些术语不仅仅是一个词,所以它可能有空格。

我声明了 2 个变量,比如 $foo 和 $bar。我有 2 个 for 循环,它们将文件 1 中的每个术语组合到文件 2 中的每个术语并查询数据库。每次每个术语都进入变量。该数据库是文本索引的。我正在使用 DBI 模块。我的查询是这样的:

my $query_handle = $connect->prepare("SELECT value FROM value_table WHERE
MATCH(column_text_indexed) AGAINST ('+"$foo" +"$bar"' in boolean mode)") || die
"Prepare failed:$DBI::errstr\n";

它给出了以下错误:

Scalar found where operator expected at program.pl line 32, near ""SELECT value FROM value_table
WHERE MATCH(column_text_indexed) AGAINST ('+"$foo"
(Missing operator before $foo?)
String found where operator expected at program.pl line 32, near "$foo" +""
(Missing operator before " +"?)
Scalar found where operator expected at program.pl line 32, near "" +"$bar"
(Missing operator before $bar?)
String found where operator expected at program.pl line 32, near "$bar"' in boolean mode)""
(Missing operator before "' in boolean mode)"?)
syntax error at program.pl line 32, near ""SELECT value FROM value_table WHERE
MATCH(column_text_indexed) against ('+"$foo"
Execution of program.pl aborted due to compilation errors.

此外,我还有一个问题:当术语类似于“81-α-羟化 enzyme 缺乏症”或“26-脱氧类固醇 active 稳定”时,在术语周围使用引号是否正确?根据http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html它说如果要搜索确切的术语并且我希望搜索确切的术语,则使用引号。当我使用 () 时,我得到了结果,但后来我认为它会将以空格分隔的整个单词视为不同的单词,并给出其中任何一个的结果。

非常感谢任何帮助。

谢谢。

最佳答案

假设你想创建字符串

+"foo" +"bar"

(是的,我现在忽略插值。)

您不能只将整个内容放在双引号中,因为字符串文字将在遇到的第一个双引号处结束。您还需要转义现有的双引号(以及双引号字符串中特殊的任何其他字符)。

"+\"foo\" +\"bar\""

或者,您可以使用不同的分隔符,例如

qq!+"foo" +"bar"!

qq{+"foo" +"bar"}

现在让我们插入我们实际想要的值。

qq{+"$foo" +"$bar"}

一起:

my $sth = $dbh->prepare(qq{
SELECT value
FROM value_table
WHERE MATCH (column_text_indexed) AGAINST (? IN BOOLEAN MODE)
});

$sth->execute(qq{+"$foo" +"$bar"});

注意占位符的使用!始终使用占位符。 (如果您还不知道,请在 DBI 文档中搜索该词。)如果 $foo$bar 包含双引号或其他奇怪的字符,您的数据不会被意外解释为代码。

关于mysql - 使用Perl在mysql中使用空格查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483755/

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