搜索功能上的SQL错误

时间:2014-07-13 15:14:07

标签: php sql

正手我想道歉,变量名是荷兰语,但我的页面导航和搜索框遇到了困难......

这是代码:

$zoekwoord="";
$html.=<<<EOT
    <form method="get" class="zoek">
        <input type="hidden" name="page" value="home_overzicht">
        <input type="text" name="zoekwoord">
        <input type="submit" value="zoeken"/>
    </form>
EOT;
if(!empty($_GET['zoekwoord'])){
        $zoekwoord=$_GET['zoekwoord'];
    }

    $itemsperpagina = 20;
    $aantal=$data->berichten_tellen($zoekwoord);
    $aantalpaginas=ceil($aantal / $itemsperpagina); // Altijd omhoog!

    if (empty($_GET['pagina'])) {
        $pagina=1;
    } else {
        $pagina=intval($_GET['pagina']);
    }

    if (($pagina<1) || ($pagina>$aantalpaginas)) $pagina=1; 

    $html_navigatie='<p>';
    if ($pagina>1) {
        $html_navigatie.='<a href="?page=home_overzicht&pagina='.($pagina-1).'&zoekwoord='.($zoekwoord).'">Vorige</a>';
    }
    $html_navigatie.=" Pagina {$pagina}/{$aantalpaginas} ";
    if ($pagina<$aantalpaginas) {
        $html_navigatie.='<a href="?page=home_overzicht&pagina='.($pagina+1).'&zoekwoord='.($zoekwoord).'">Volgende</a>';
    }
    $html_navigatie.="</p>";

    $html.=$html_navigatie;

这是计算消息的功能

function berichten_tellen($zoekwoord=""){

        $result = $this->mysqli->query(
<<<EOT
        SELECT COUNT (*) FROM home
        WHERE lower(concat_ws(' ',kop,auteur))
        LIKE lower('%{$zoekwoord}%')
EOT
        );
        if(!$result){
            die("MySQL error: " . $this->mysqli->error);
        }
        if($result){
            $row = $result->fetch_row();
            $result->free();
            return($row[0]);
        }else{
            return(FALSE);
        }

    }

这是导航功能

function home_berichten_laten_zien($pagina, $itemsperpagina,$zoekwoord=""){

            $l = ($pagina-1) * $itemsperpagina;
            if ($l<0) $l=0;

            $result = $this->mysqli->query(
<<<EOT
            SELECT id, kop, artikel, auteur, datum, status
            FROM home
            WHERE lower(concat_ws(' ',kop,auteur))
            LIKE lower('%{$cleandata}%') ORDER BY kop LIMIT {$l},{$itemsperpagina}  
EOT
            );
            if(!$result){
                die("MySQL error: " . $this->mysqli->error);
            }
            $waardes = array();
            while($row = $result->fetch_assoc()){
                $waardes[] = $row;
            }
            return $waardes;
        }

这是我打开特定页面时得到的错误:

MySQL错误:您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在正确的语法附近使用&#39; *)FROM home WHERE lower(concat_ws(&#39;&#39;,kop,auteur))LIKE lower(&#39 ; %%&#39;)&#39;在第1行

2 个答案:

答案 0 :(得分:1)

埋在MySQL documentation的深处就是这个:

  

要在表达式中将名称用作函数调用,必须为no   名称和以下“(”括号之间)的空格   字符。

即,COUNT(*)被识别。但是,COUNT (*)不是。

请注意,这是MySQL数据库的特性。

答案 1 :(得分:1)

您的COUNT()不正确。你不能把计数(),你必须把它像计数()。我认为如果你坚持计数(),你可以做些什么,但我不确定。查阅here