<legend id='PcMAt'><style id='PcMAt'><dir id='PcMAt'><q id='PcMAt'></q></dir></style></legend>

<tfoot id='PcMAt'></tfoot>
  • <i id='PcMAt'><tr id='PcMAt'><dt id='PcMAt'><q id='PcMAt'><span id='PcMAt'><b id='PcMAt'><form id='PcMAt'><ins id='PcMAt'></ins><ul id='PcMAt'></ul><sub id='PcMAt'></sub></form><legend id='PcMAt'></legend><bdo id='PcMAt'><pre id='PcMAt'><center id='PcMAt'></center></pre></bdo></b><th id='PcMAt'></th></span></q></dt></tr></i><div id='PcMAt'><tfoot id='PcMAt'></tfoot><dl id='PcMAt'><fieldset id='PcMAt'></fieldset></dl></div>

        • <bdo id='PcMAt'></bdo><ul id='PcMAt'></ul>

        <small id='PcMAt'></small><noframes id='PcMAt'>

        使用 PDO 准备好的语句使用搜索字段中的多个关键

        时间:2023-09-21

      1. <tfoot id='1lL8o'></tfoot>
          1. <i id='1lL8o'><tr id='1lL8o'><dt id='1lL8o'><q id='1lL8o'><span id='1lL8o'><b id='1lL8o'><form id='1lL8o'><ins id='1lL8o'></ins><ul id='1lL8o'></ul><sub id='1lL8o'></sub></form><legend id='1lL8o'></legend><bdo id='1lL8o'><pre id='1lL8o'><center id='1lL8o'></center></pre></bdo></b><th id='1lL8o'></th></span></q></dt></tr></i><div id='1lL8o'><tfoot id='1lL8o'></tfoot><dl id='1lL8o'><fieldset id='1lL8o'></fieldset></dl></div>
              <tbody id='1lL8o'></tbody>
            <legend id='1lL8o'><style id='1lL8o'><dir id='1lL8o'><q id='1lL8o'></q></dir></style></legend>
            • <bdo id='1lL8o'></bdo><ul id='1lL8o'></ul>

                  <small id='1lL8o'></small><noframes id='1lL8o'>

                  本文介绍了使用 PDO 准备好的语句使用搜索字段中的多个关键字进行 LIKE 查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  网站用户使用搜索表单来查询产品数据库.输入的关键字搜索数据库中产品的标题.

                  Site users use a search form to query a database of products. The keywords entered search the titles for the products in the database.

                      public function startSearch($keywords){
                          $keywords = preg_split('/[s]+/', $keywords);
                          $totalKeywords = count($keywords);
                  
                          foreach($keywords as $key => $keyword){
                              $search .= '%'.$keyword.'%';
                              if($key != ($totalKeywords)-1){
                                  $search .= ' AND itemTitle LIKE ';
                              }
                          }
                  $sql=$this->db->prepare("SELECT * FROM prodsTable WHERE itemTitle LIKE ?");
                  $sql->bindParam(1, $search);        
                  $sql->execute ();
                  $sql->fetchALL(PDO::FETCH_ASSOC);
                  

                  如果用户输入单个关键字,则搜索有效,但如果使用多个关键字,则查询不会执行.

                  The search works if a user enters a single keyword, but if multiple keywords are used the query does not execute.

                  如果:$keywords = '苹果 ipod';$search = '%apple% AND itemTitle LIKE %ipod%';

                  if: $keywords = 'apple ipod'; $search = '%apple% AND itemTitle LIKE %ipod%';

                  所以准备好的语句应该是这样的:

                  So the prepared statement should look like this:

                  SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% AND itemTitle LIKE %ipod%"

                  "SELECT * FROM prodsTable WHERE itemTitle LIKE %apple% AND itemTitle LIKE %ipod%"

                  如果返回的两个产品的标题中都应包含apple"和ipod",则不会返回任何结果.

                  No results return when two products should return having both "apple" and "ipod" in their titles.

                  我做错了什么?

                  推荐答案

                  预置语句保护您免受 sql 注入,因此参数中的 sql 代码将不会被解释.在调用 prepare() 之前,您必须使用正确数量的 AND itemTitle LIKE ? 构建一个 sql 查询.

                  Prepared statements protect you from sql injection, so sql code in the parameters will not be interpreted. You will have to build a sql query with the correct number of AND itemTitle LIKE ? before calling prepare().

                    $keywords = preg_split('/[s]+/', $keywords);
                    $totalKeywords = count($keywords);
                    $query = "SELECT * FROM prodsTable WHERE itemTitle LIKE ?";
                  
                    for($i=1 ; $i < $totalKeywords; $i++){
                      $query .= " AND itemTitle LIKE ? ";
                    }
                  
                    $sql=$this->db->prepare($query);
                    foreach($keywords as $key => $keyword){
                      $sql->bindValue($key+1, '%'.$keyword.'%');
                    }
                    $sql->execute ();
                  

                  这篇关于使用 PDO 准备好的语句使用搜索字段中的多个关键字进行 LIKE 查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:为什么构建 PDO 连接很慢? 下一篇:在 foreach 循环参数中分解数组

                  相关文章

                  最新文章

                  <i id='kxL2p'><tr id='kxL2p'><dt id='kxL2p'><q id='kxL2p'><span id='kxL2p'><b id='kxL2p'><form id='kxL2p'><ins id='kxL2p'></ins><ul id='kxL2p'></ul><sub id='kxL2p'></sub></form><legend id='kxL2p'></legend><bdo id='kxL2p'><pre id='kxL2p'><center id='kxL2p'></center></pre></bdo></b><th id='kxL2p'></th></span></q></dt></tr></i><div id='kxL2p'><tfoot id='kxL2p'></tfoot><dl id='kxL2p'><fieldset id='kxL2p'></fieldset></dl></div>

                  1. <small id='kxL2p'></small><noframes id='kxL2p'>

                    <legend id='kxL2p'><style id='kxL2p'><dir id='kxL2p'><q id='kxL2p'></q></dir></style></legend>

                    <tfoot id='kxL2p'></tfoot>

                      • <bdo id='kxL2p'></bdo><ul id='kxL2p'></ul>