0

我在 youtube 上关注了这个 phpacademy 教程,但无法通过 echo 打印关键字。相反,我得到:

`keywords` LIKE '%keyword%'

什么?代码已逐字复制。可能是平台问题?

这个语句 ->$where .= "关键字有问题LIKE '%keyword%'";吗?

<?php

    include 'db.inc.php';

    function search_results($keywords) {
        $returned_results=array();
        $where="";

        $keywords=preg_split('/[\s]+/', $keywords);
        $total_keywords = count($keywords);

        foreach($keywords as $key=>$keyword){
            $where .= "`keywords` LIKE '%keyword%'"; // Where's the issue?
            if($key != ($total_keywords-1)){
                $where .= " AND ";  
            }
        }  

        echo $where;
    }

?>
4

3 回答 3

1

我对你的代码做了一些重构,现在更清楚了。请参阅代码中的注释。

include 'db.inc.php';

function search_results($keywords) {
    $where = array();

    // skip empty results with PREG_SPLIT_NO_EMPTY flag
    $keywords = preg_split('/[\s]+/', $keywords, -1, PREG_SPLIT_NO_EMPTY);

    foreach ($keywords as $keyword) {
        // escape string (anti sql injection)
        $keyword = mysql_real_escape_string($keyword);

        // your problem was using keyword instead of $keyword
        $where[] = "`keywords` LIKE '%$keyword%'";
    }  

    echo implode(' AND ', $where);
}
于 2012-07-07T05:23:44.967 回答
0

当你看到下面的代码时,

`keywords` LIKE '%keyword%'

本教程告诉您,您需要%keyword%用两者之间的任何关键字替换它%。因此,您的代码应如下所示:

<?php

    include 'db.inc.php';

    function search_results($keywords) {
        $returned_results=array();
        $where="";

        $keywords=preg_split('/[\s]+/', $keywords);
        $total_keywords = count($keywords);

        foreach($keywords as $key=>$keyword){
            $where .= "`keywords` LIKE '%$keyword%'"; // Issue fixed.
            if($key != ($total_keywords-1)){
                $where .= " AND ";  
            }
        }  

        echo $where;
    }

?>
于 2012-07-07T05:20:21.877 回答
0

在我看来,这只是教程中 where 子句中的一个错字 - 在关键字变量名之前缺少 $ 字符。其他答案提供了答案,但没有指出它看起来像一个错字。对于来自其他不需要像 PHP 那样的变量名前缀的语言的人来说,这是一个常见的错字。

于 2012-07-07T05:38:09.277 回答