我正在开发一个 PHP 论坛软件 ( FluxBB ),一个用户遇到了一个相当有趣的错误,那就是 - 看起来 - PHP 在字符串中间插入了一个省略号。
由于我在网上发现了一个类似的错误,我不得不说这段代码位于一个函数中,并且$db
是一个全局变量。
这是(简化的)代码:
// Get unique words from the above arrays
$unique_words = array_unique(array_merge($words['add']['post'], $words['add']['subject']));
if (!empty($unique_words))
{
$result = $db->query('SELECT id, word FROM '.$db->prefix.'search_words WHERE word IN('.implode(',', preg_replace('#^(.*)$#', '\'\1\'', $unique_words)).')', true) or error('Unable to fetch search index words', __FILE__, __LINE__, $db->error());
$word_ids = array();
while ($row = $db->fetch_row($result))
$word_ids[$row[1]] = $row[0];
现在,$unique_words
由多个法语单词组成(在这种情况下),省略号被添加到逗号之前和结束引号之后。这一定意味着它是在 implode 调用期间添加的,这根本没有意义。
注意:转义单词会得到照顾。
事实上,只有 PHP 可能导致错误,因为调试器吐出的查询在执行之前已保存。
我实际上是在尝试提供支持,但我无法提出合理的解决方案...