教义上的对抗
我发现如果我在 Doctrine 中使用 MATCH AGAINST 和 WHERE 语法并不会替换传递的参数。例如,如果我运行以下代码 $
q = Doctrine_Query::create()
->select('*')
->from('TourismUnit tu')
->where('FALSE');
if ($keywords) {
$keywords_array = $this->parse_keywords($keywords);
for ($i = 0; $i < sizeof($keywords_array); $i++)
$q->orWhere("MATCH (name, description) AGAINST ('?*' IN BOOLEAN MODE)", $keywords_array[$i]);
}
没有找到任何结果。 如果他们使用字符串连接似乎可以工作。
$q->orWhere("MATCH (name, description) AGAINST ('".$keywords_array[$i]."*' IN BOOLEAN MODE)");
我使用原则 1.2.2。
有谁知道为什么在执行sql表达式之前不替换参数?
I found that if I use MATCH AGAINST in Doctrine with WHERE syntax does not replace the parameters passed. For example if I run the following code
$
q = Doctrine_Query::create()
->select('*')
->from('TourismUnit tu')
->where('FALSE');
if ($keywords) {
$keywords_array = $this->parse_keywords($keywords);
for ($i = 0; $i < sizeof($keywords_array); $i++)
$q->orWhere("MATCH (name, description) AGAINST ('?*' IN BOOLEAN MODE)", $keywords_array[$i]);
}
does not find any results.
And if they use the string concatenation seems to work.
$q->orWhere("MATCH (name, description) AGAINST ('".$keywords_array[$i]."*' IN BOOLEAN MODE)");
I use Doctrine 1.2.2.
Does anyone know why not replace the parameters before executing the sql expression?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在上述准备好的语句中,占位符不喜欢引号 如学说手册中所示。
所以你可以简单地写:
In prepared statements as above, the placeholder doesn't like quotes as shown in the doctrine manual.
So you could simply write:
使用单引号导致问题,
将其转换为使用
concat("'", ?, "*'")
the use of single quote causing the problem,
convert it to use
concat("'", ?, "*'")