簡體   English   中英

如何使用 PHP 中的參數在 SQL 服務器中調用存儲過程

[英]How to call a stored procedure in SQL Server with parameters from PHP

我使用 Codeigniter,這就是我在 MySQL 中調用存儲過程的方式:

public function InsertDataSistra($NumPart, $typeChild){
    $sql = $this->db->query("CALL PYCC_InsertDataSistra('$NumPart', '$typeChild')");
}

但是我需要在 SQL 服務器中調用一個帶參數的存儲過程。 我在 SQL 服務器中的 SP 是:

CREATE PROCEDURE CantidadReal_PRMS 
    @NumPart VARCHAR(25) = NULL, 
    @HOUSE VARCHAR(15) = NULL,
    @LBAIS FLOAT(45) = NULL, 
    @LBROW FLOAT(45) = NULL,
    @LBTIR FLOAT(45) = NULL
...

那么這個SP的調用是什么?

public function PzRealesPRMS($NumPart, $House, $LBAIS, $LBROW, $LBTIR){
    $sql = $this->db->query("EXEC CantidadReal_PRMS  ???????????????");
}

在 SQL 語句中注入值使您的方法對可能的 SQL 注入開放。 您可以嘗試使用查詢綁定或准備好的查詢。 在這兩種情況下,查詢生成器和數據庫連接都會處理 escaping 數據:

使用查詢綁定的語句:

public function PzRealesPRMS($NumPart, $House, $LBAIS, $LBROW, $LBTIR) {
    $sql = $this->db->query(
       "EXEC CantidadReal_PRMS @NumPart = ?, @HOUSE = ?, @LBAIS = ?, @LBROW = ?, @LBTIR = ?",
       [$NumPart, $House, $LBAIS, $LBROW, $LBTIR]
    );
}

使用准備好的查詢語句:

public function PzRealesPRMS($NumPart, $House, $LBAIS, $LBROW, $LBTIR) {
   $query = $this->db->prepare(function($db) {
      $sql = "EXEC CantidadReal_PRMS @NumPart = ?, @HOUSE = ?, @LBAIS = ?, @LBROW = ?, @LBTIR = ?";
      return (new Query($db))->setQuery($sql);
   });

   $results = $query->execute($NumPart, $House, $LBAIS, $LBROW, $LBTIR);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM