【问题标题】:Search query array value binding not working搜索查询数组值绑定不起作用
【发布时间】:2016-10-26 13:10:14
【问题描述】:

我正在处理搜索查询,但遇到了一点问题...所以正如您在下面的代码中看到的那样,我正在向数组添加值以便稍后在脚本中执行它,但它并没有真正起作用...因此,当我 var_dumped 所有这些时,它按预期返回,但 :q 没有更改为在链接中输入的值。

$query = "SELECT * FROM articles";

$columnsQuery = [];
$values       = [];

if(isset($_GET['q']) && !empty($_GET['q']))
{
$columnsQuery[] = " WHERE MATCH (title) AGAINST (':q' IN NATURAL LANGUAGE MODE)";
$values[":q"]   = $_GET['q'];
}

$fullQuery = $query . implode(" ", $columnsQuery)
   . " ORDER BY id DESC"
   . " LIMIT {$paginator->getLimitSQL()}";

$getArticles = $db->prepare($fullQuery)->execute($values);

【问题讨论】:

    标签: php arrays search full-text-search


    【解决方案1】:
        $query          = "SELECT * FROM articles";
    
        $columnsQuery   = [];
        $values         = [];
    
        if(isset($_GET['q']) && !empty($_GET['q']))
        {
            $columnsQuery[]     = " WHERE MATCH (title) AGAINST (':q' IN NATURAL LANGUAGE MODE)";
            $values["q"]        = $_GET['q'];           // TRY WITHOUT COLON
        }
    
        $fullQuery = $query . implode(" ", $columnsQuery)
            . " ORDER BY id DESC"
            . " LIMIT {$paginator->getLimitSQL()}";
    
        $getArticles = $db->prepare($fullQuery)->execute($values);
    

    【讨论】:

      【解决方案2】:

      你不应该用冒号代替$values["q"] = $_GET['q'];

      $query          = "SELECT * FROM articles";
      
      $columnsQuery   = [];
      $values         = [];
      
      if(isset($_GET['q']) && !empty($_GET['q']))
      {
          $columnsQuery[]     = " WHERE MATCH (title) AGAINST (':q' IN NATURAL LANGUAGE MODE)";
          $values["q"]        = $_GET['q'];           // TRY WITHOUT COLON
      }
      
      $fullQuery = $query . implode(" ", $columnsQuery)
          . " ORDER BY id DESC"
          . " LIMIT {$paginator->getLimitSQL()}";
      
      $getArticles = $db->prepare($fullQuery)->execute($values);
      

      【讨论】:

      • 是的,从您的答案中复制了..@Poiz。但据我所知,不应该有冒号..顺便说一句,如果你有问题我可以删除它。
      • 没有错误,这是来自 var_dumping 查询和值 string(177) "SELECT * FROM 文章 WHERE MATCH (title) AGAINST (':q' IN NATURAL LANGUAGE MODE) ORDER BY id DESC LIMIT 1,5" 数组(1) { ["q"]=> 字符串(3) "tja" }
      【解决方案3】:
      $query = "SELECT * FROM articles";
      
      $values = array();
      if(!empty($_GET['q'])) {
        $query .= " WHERE MATCH (title) AGAINST (q IN NATURAL LANGUAGE MODE)";
        $db->bindParam(':q', $_GET['q']);
      }
      
      $fullQuery = $query  . " ORDER BY id DESC" . " LIMIT {$paginator->getLimitSQL()}"
      $getArticles = $db->prepare($fullQuery)->execute();
      

      【讨论】:

        【解决方案4】:

        所以过了一会儿我想通了,在查询中绑定时不应该使用参数,就像@Poiz 指出的那样,我也不应该在数组中使用冒号

        感谢所有尝试提供帮助的人:)

        【讨论】:

          猜你喜欢
          • 2014-04-05
          • 1970-01-01
          • 2011-10-04
          • 2017-08-09
          • 2023-04-09
          • 2020-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多