【问题标题】:How to call a stored procedure in SQL Server with parameters from PHP如何使用 PHP 中的参数在 SQL Server 中调用存储过程
【发布时间】:2021-04-30 13:19:42
【问题描述】:

我使用 Codeigniter,这就是我在 MySQL 中调用存储过程的方式:

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

但我需要在 SQL Server 中调用带有参数的存储过程。我在 SQL server 中的 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  ???????????????");
}

【问题讨论】:

  • 不要标记冲突的RDBMS,只标记你真正使用的那个。 MySQL 和 SQL Server 是完全不同的竞争产品

标签: php sql codeigniter stored-procedures


【解决方案1】:

在 SQL 语句中注入值会使您的方法对可能的 SQL 注入开放。您可以尝试使用查询绑定或准备好的查询。在这两种情况下,查询生成器和数据库连接都会处理转义数据:

使用查询绑定的语句:

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多