PostgreSQL搜索不起作用

时间:2017-05-07 16:19:33

标签: php postgresql

问题

我正在创建一个搜索,允许用户查看编号是否是素食主义者,但无论我搜索的是什么,我只是在搜索编号时打印素食主义者。我希望它打印出数据库中'vegan'列中的内容。

代码

<?php       
    // Connecting, selecting database
    $dbconn = pg_connect("host=***** port=*****
    dbname=***** user=***** password=*****")
    or die('Could not connect: ' . pg_last_error());

    //collect
    if(isset($_POST['search'])) {
        $searchq = $_POST['search'];
        // $searchq = preg_replace("#[^0-9a-z]#i"."".$searchq);

    // Performing SQL query
    $query = "SELECT vegan FROM enumbers WHERE code LIKE '%$searchq%'";
    $ret = pg_query($dbconn, $query);
   if(!$ret){
      echo pg_last_error($dbconn);
      exit;
   } 
   $output = '';
   while($row = pg_fetch_assoc($ret)){
            $code = $row['code'];
            $name = $row['name'];
            $type = $row['type'];
            $vegan = $row['vegan'];

            $output .= '<div> '.vegan.' ';
   }
}
   pg_close($dbconn);

?>

1 个答案:

答案 0 :(得分:2)

您永远不会定义变量名vegan但想要使用它吗? (如果行$output .= '<div> '.vegan.' ';上有拼写错误(错过$?)

设置后,您永远不会在$output中推送任何数据。 应该更像是:

$output = ''; // there you define it

while($row = pg_fetch_assoc($ret)){
        $code = $row['code'];
        $name = $row['name'];
        $type = $row['type'];
        $vegan = $row['vegan'];

        // here you concatenate data

        $output .= "<div>$code / $name / $type / $vegan</div>";
}
echo"Vegan : $output"; // do we have all data ?

$searchq永远不会在你的代码中被控制和消毒。

从不信任来自输入的用户数据!

  

你应该真的考虑使用PPS : Prepared Parameterized Statements。这将有助于Preventing SQL injection