久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  • <legend id='yLh4N'><style id='yLh4N'><dir id='yLh4N'><q id='yLh4N'></q></dir></style></legend>

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

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

    1. <tfoot id='yLh4N'></tfoot>
          <bdo id='yLh4N'></bdo><ul id='yLh4N'></ul>

      1. 如何使用 mysqli API 制作一個(gè)完全動(dòng)態(tài)的準(zhǔn)備語句

        How to make a fully dynamic prepared statement using mysqli API?(如何使用 mysqli API 制作一個(gè)完全動(dòng)態(tài)的準(zhǔn)備語句?)
      2. <legend id='r5YSr'><style id='r5YSr'><dir id='r5YSr'><q id='r5YSr'></q></dir></style></legend>
        <i id='r5YSr'><tr id='r5YSr'><dt id='r5YSr'><q id='r5YSr'><span id='r5YSr'><b id='r5YSr'><form id='r5YSr'><ins id='r5YSr'></ins><ul id='r5YSr'></ul><sub id='r5YSr'></sub></form><legend id='r5YSr'></legend><bdo id='r5YSr'><pre id='r5YSr'><center id='r5YSr'></center></pre></bdo></b><th id='r5YSr'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='r5YSr'><tfoot id='r5YSr'></tfoot><dl id='r5YSr'><fieldset id='r5YSr'></fieldset></dl></div>

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

        1. <tfoot id='r5YSr'></tfoot>

                <tbody id='r5YSr'></tbody>
                • <bdo id='r5YSr'></bdo><ul id='r5YSr'></ul>

                • 本文介紹了如何使用 mysqli API 制作一個(gè)完全動(dòng)態(tài)的準(zhǔn)備語句?的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

                  問題描述

                  我需要更改此查詢以使用準(zhǔn)備好的語句.可能嗎?

                  I need to change this query to use a prepared statement. Is it possible?

                  查詢:

                  $sql = "SELECT id, title, content, priority, date, delivery FROM tasks " . $op . " " . $title . " " . $content . " " . $priority . " " . $date . " " . $delivery . " ORDER BY " . $orderField . " " . $order . " " . $pagination . "";
                  

                  在查詢之前,有代碼來檢查 POST 變量并更改查詢中變量的內(nèi)容.

                  Before the query, there's code to check the POST variables and change the content of variables in the query.

                  //For $op makes an INNER JOIN with or without IN clause depending on the content of a $_POST variable
                  $op = "INNER JOIN ... WHERE opID  IN ('"$.opID."')";
                  //Or
                  $op = "INNER JOIN ... ";
                  
                  //For $title (depends of $op):
                  $title = "WHERE title LIKE'%".$_POST["title"]."%'";
                  //Or
                  $title = "AND title LIKE'%".$_POST["title"]."%'";
                  
                  //For $content:
                  $content = "AND content LIKE '%".$_POST["content"]."%'";
                  
                  //For $priority just a switch:
                  $priority = "AND priority = DEPENDING_CASE";
                  
                  //For $date and $delivery another switch 
                  $d = date("Y-m-d", strtotime($_POST["date"]));
                  $date = "AND date >= '$d' 00:00:00 AND date <= '$d' 23:59:59";
                  //Or $date = "AND date >= '$d' 00:00:00";
                  //Or $date = "AND date <= '$d' 23:59:59";
                  
                  //For $orderField
                  $orderField = $_POST["column"];
                  
                  //For $order
                  $order= $_POST["order"];
                  
                  //For $pagination 
                  $pagination = "LIMIT ".$offset.",". $recordsPerPage;
                  

                  如何使用準(zhǔn)備好的語句執(zhí)行此查詢?

                  How I could do this query using prepared statement?

                  • 查詢可能更加靜態(tài),但這意味著生成不同的準(zhǔn)備好的語句并根據(jù) $_POST 檢查執(zhí)行它.
                  • 這取決于許多變量,因?yàn)榇瞬樵冊诎阉髯侄魏鸵判虻牧械谋碇酗@示結(jié)果.

                  一個(gè)完整的查詢示例如下(取決于 $_POST 檢查):

                  A full example of query would be like this (depending of $_POST checks):

                  SELECT id, title, content, priority, date, delivery FROM tasks INNER JOIN op ON task.op = op.opId WHERE op IN (4851,8965,78562) AND title LIKE '%PHT%' AND content LIKE '%%' AND priority = '2' ORDER BY date DESC LIMIT 0, 10 
                  

                  推薦答案

                  一個(gè)很好的問題.感謝您轉(zhuǎn)向準(zhǔn)備好的聲明.似乎經(jīng)過這么多年的斗爭,這個(gè)想法終于開始接管了.

                  An excellent question. And thank you for moving to prepared statements. It seems that after all those years of struggle, the idea finally is starting to take over.

                  免責(zé)聲明:會(huì)有指向我自己網(wǎng)站的鏈接,因?yàn)槲乙呀?jīng)幫助人們使用 PHP 20 多年,并且癡迷于撰寫有關(guān)最常見問題的文章.

                  是的,這完全有可能.查看我的文章,如何為 mysqli 創(chuàng)建搜索過濾器以獲得完整功能的示例.

                  Yes, it's perfectly possible. Check out my article, How to create a search filter for mysqli for the fully functional example.

                  對于 WHERE 部分,您只需要?jiǎng)?chuàng)建兩個(gè)單獨(dú)的數(shù)組 - 一個(gè)包含帶有占位符的查詢條件,另一個(gè)包含這些占位符的實(shí)際值,即:

                  For the WHERE part, all you need is to create two separate arrays - one containing query conditions with placeholders and one containing actual values for these placeholders, i.e:

                  $conditions = [];
                  $parameters = [];
                  
                  if (!empty($_POST["content"])) {
                      $conditions[] = 'content LIKE ?';
                      $parameters[] = '%'.$_POST['content ']."%";
                  }
                  

                  等,適用于所有搜索條件.

                  and so on, for all search conditions.

                  然后你可以implode使用AND字符串作為膠水的所有條件,并得到一個(gè)一流的WHERE子句:

                  Then you could implode all the conditions using AND string as a glue, and get a first-class WHERE clause:

                  if ($conditions)
                  {
                      $where .= " WHERE ".implode(" AND ", $conditions);
                  }
                  

                  所有搜索條件的例程都相同,但對于 IN() 子句會(huì)有所不同.

                  The routine is the same for all search conditions, but it will be a bit different for the IN() clause.

                  有點(diǎn)不同,因?yàn)槟枰砑痈嗾嘉环透嘀?

                  is a bit different as you will need more placeholders and more values to be added:

                  if (!empty($_POST["opID"])) {
                      $in  = str_repeat('?,', count($array) - 1) . '?';
                      $conditions[] = "opID IN ($in)";
                      $parameters = array_merge($parameters, $_POST["opID"]);
                  }
                  

                  此代碼將向 IN() 子句添加與 $_POST["opID"] 中的元素一樣多的 ? 占位符并將所有這些值添加到 $parameters 數(shù)組中.解釋可以在我網(wǎng)站上同一部分的相鄰文章中找到.

                  this code will add as many ? placeholders to the IN() clause as many elements in the $_POST["opID"] and will add all those values to the $parameters array. The explanation can be found in the adjacent article in the same section on my site.

                  完成WHERE 子句后,您可以轉(zhuǎn)到查詢的其余部分

                  After you are done with WHERE clause, you can move to the rest of your query

                  您不能參數(shù)化 order by 子句,因?yàn)樽侄蚊Q和 SQL 關(guān)鍵字不能由占位符表示.為了解決這個(gè)問題,我懇求您使用我為此專門編寫的白名單功能.有了它,您可以使您的 ORDER BY 子句 100% 安全但非常靈活.您只需要預(yù)先定義一個(gè)數(shù)組,其中的字段名稱允許在 order by 子句中:

                  You cannot parameterize the order by clause, because field names and SQL keywords cannot be represented by a placeholder. And to tackle with this problem I beg you to use a whitelisting function I wrote for this exact purpose. With it you can make your ORDER BY clause 100% safe but perfectly flexible. All you need is to predefine an array with field names allowed in the order by clause:

                  $sortColumns = ["title","content","priority"]; // add your own
                  

                  然后使用這個(gè)方便的函數(shù)獲取安全值:

                  and then get safe values using this handy function:

                  $orderField = white_list($_POST["column"], $sortColumns, "Invalid column name");
                  $order = white_list($_POST["order"], ["ASC","DESC"], "Invalid ORDER BY direction");
                  

                  這是一個(gè)智能功能,涵蓋三種不同的場景

                  this is a smart function, that covers three different scenarios

                  • 如果沒有提供任何值(即 $_POST["column"] 為空),將使用白名單中的第一個(gè)值,因此它用作默認(rèn)值
                  • 如果提供了正確的值,它將在查詢中使用
                  • 如果提供的值不正確,則會(huì)引發(fā)錯(cuò)誤.

                  LIMIT 值是完全參數(shù)化的,因此您可以將它們添加到 $parameters 數(shù)組中:

                  LIMIT values are perfectly parameterized so you can just add them to the $parameters array:

                  $limit = "LIMIT ?, ?";
                  $parameters[] = $offset;
                  $parameters[] = $recordsPerPage;
                  

                  總裝

                  最后,您的查詢將是這樣的

                  The final assembly

                  In the end, your query will be something like this

                  $sql = "SELECT id, title, content, priority, date, delivery 
                          FROM tasks INNER JOIN ... $where ORDER BY `$orderField` $order $limit"; 
                  

                  并且可以使用以下代碼執(zhí)行

                  And it can be executed using the following code

                  $stmt = $mysqli->prepare($sql);
                  $stmt->bind_param(str_repeat("s", count($parameters)), ...$parameters);
                  $stmt->execute();
                  $data = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
                  

                  其中 $data 是一個(gè)包含查詢返回的所有行的常規(guī)數(shù)組.

                  where $data is a conventional array contains all the rows returned by the query.

                  這篇關(guān)于如何使用 mysqli API 制作一個(gè)完全動(dòng)態(tài)的準(zhǔn)備語句?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

                  【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

                  相關(guān)文檔推薦

                  store_result() and get_result() in mysql returns false(mysql 中的 store_result() 和 get_result() 返回 false)
                  Call to undefined function mysqli_result::num_rows()(調(diào)用未定義的函數(shù) mysqli_result::num_rows())
                  PHP Prepared Statement Problems(PHP 準(zhǔn)備好的語句問題)
                  mysqli_fetch_array returning only one result(mysqli_fetch_array 只返回一個(gè)結(jié)果)
                  PHP MySQLi Multiple Inserts(PHP MySQLi 多次插入)
                  How do I make sure that values from MySQL keep their type in PHP?(如何確保 MySQL 中的值在 PHP 中保持其類型?)

                    <bdo id='Ti3iU'></bdo><ul id='Ti3iU'></ul>

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

                    <i id='Ti3iU'><tr id='Ti3iU'><dt id='Ti3iU'><q id='Ti3iU'><span id='Ti3iU'><b id='Ti3iU'><form id='Ti3iU'><ins id='Ti3iU'></ins><ul id='Ti3iU'></ul><sub id='Ti3iU'></sub></form><legend id='Ti3iU'></legend><bdo id='Ti3iU'><pre id='Ti3iU'><center id='Ti3iU'></center></pre></bdo></b><th id='Ti3iU'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='Ti3iU'><tfoot id='Ti3iU'></tfoot><dl id='Ti3iU'><fieldset id='Ti3iU'></fieldset></dl></div>
                    <legend id='Ti3iU'><style id='Ti3iU'><dir id='Ti3iU'><q id='Ti3iU'></q></dir></style></legend>

                          <tfoot id='Ti3iU'></tfoot>
                              <tbody id='Ti3iU'></tbody>
                          • 主站蜘蛛池模板: av中文字幕在线播放 | 三级av在线 | 久久国产精品久久久久久久久久 | av一区二区在线观看 | 男女一区二区三区 | 国产91av视频在线观看 | 第四色影音先锋 | 全免费a级毛片免费看视频免 | 午夜在线小视频 | 欧美黄色网络 | 亚洲高清在线观看 | 久久免费精品 | 成人精品国产一区二区4080 | 欧美一级网站 | 精品国产1区2区3区 在线国产视频 | 色综合一区二区 | 一区二区三区韩国 | 麻豆精品国产91久久久久久 | 日中文字幕在线 | 亚洲日日 | h视频免费在线观看 | 九九视频在线观看视频6 | 中文字幕1区2区3区 日韩在线视频免费观看 | 亚洲一一在线 | 久久久观看 | 在线国产小视频 | 自拍偷拍小视频 | 五月婷婷丁香婷婷 | 久草免费在线视频 | 99精品九九 | 精品久久99 | 亚洲女人天堂成人av在线 | 操久久 | 欧美精品一区三区 | 草樱av| 日韩欧美专区 | 欧美日韩在线精品 | 欧美一区二区三区在线视频 | 国产一区二区精品在线 | 欧美在线a | 欧美一级高清片 |