php - 存储过程的替代品

标签 php mysql pdo

我在使用存储过程时遇到问题。调用存储过程对我不起作用。所以我把存储过程换成了sql语句。但是现在,我有一些接收参数的存储过程。例如

CREATE PROCEDURE get_category_details_proc(IN incat_id INT)
BEGIN 

SELECT name, desc 
FROM category
WHERE cat_id = incat_id;

END

如何使用简单的 sql 语句替换它?

请参阅my previous question了解更多详情。

我的数据库连接类中已经有这个函数:

public static function GetRow($sqlQuery, $params = null, $fetchStyle = PDO::FETCH_ASSOC)
 {
  $result = null;
  try
  {
   $database_handler = self::GetHandler();
   $statement_handler = $database_handler->prepare($sqlQuery);
   $statement_handler->execute($params);
   $result = $statement_handler->fetch($fetchStyle);

  }
  catch(PDOException $e)
  {
   self::Close();
   trigger_error($e->getMessage(), E_USER_ERROR);

  }
  return $result;


 }

在另一个类中,我实际上调用了我拥有的存储过程:

public static function GetCategoryDetails($categoryID)
 {
  $sql = CALL get_category_details_proc(:category_id);
              $params = array(':category_id' => $categoryID);
  return DatabaseHandler::GetRow($sql,$params);

 }

最佳答案

使用像下面这样的准备好的语句:

$pdo = new PDO(...);
$statement = $pdo->prepare('SELECT name, desc FROM category WHERE cat_id = ?');
$statement->execute(array(10)); // incat_id
$rows = $statement->fetchAll();

关于php - 存储过程的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015088/

相关文章:

php - while 循环和 PDO 语句

php - 如何获取相对目录,无论它包含在 PHP 中的哪个位置?

php - 抓取多轨种子 php

mysql - 反规范化以减少 COUNT 和 AVG 等聚合函数(计算)的使用 : worth it?

php - 如何在 Ubuntu 18.04 上为 Postgres 启用 php pdo 驱动程序

php - 为什么我可以连接到本地 SQL Server Express 而不能从 PHP 连接到远程 SQL Server?

php - laravel 5.1 : how can i have two wherePivot in eloquent?

javascript - 在 javascript 函数中重定向,codeigniter

php - 删除表列

php - 处理序列化数据与添加更多字段 - php - mysql