Php 存储过程的替代方案

Php 存储过程的替代方案,php,mysql,pdo,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语句来代替它 有关更多详细信息,请参阅 我的数据库连接类中已经有此函数: publ

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

CREATE PROCEDURE get_category_details_proc(IN incat_id INT)
BEGIN 

SELECT name, desc 
FROM category
WHERE cat_id = incat_id;

END
我如何用简单的sql语句来代替它

有关更多详细信息,请参阅

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

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

您可以使用连接构建查询字符串,但正如Rick在下面提到的,请确保强制转换/验证。始终清理所有外部输入-使用mysql\u real\u escape\u字符串,或者更好的是,使用准备好的语句

$query = "select name, desc FROM category where cat_id = ".$incat_id;
然后将其传递到PHP mysql\u查询中

$result=mysql_query($query);

我不会否决投票,但你应该注意,只对已投票/验证的数字执行此操作。很抱歉,没有在问题中看到pdo标记,是的,可能不是最佳解决方案。顺便说一句,你在最后有一个额外的报价。再次感谢你帮我清理PHP混乱!我要试试杰森的建议。谢谢你的回复。我还加了一些编码,以便你能帮助我。