saklanan prosedürleri için bir alternatif

2 Cevap php

Ben saklı yordamları kullanarak sorunları yaşıyorum. Bir saklı yordam için yapma çağrısı benim için çalışmıyor. Yani bir sql deyimi ile saklı yordam yerini aldı. Ama şimdi, ben parametreleri almak bazı saklanan prosedürleri var. örneğin

CREATE PROCEDURE get_category_details_proc(IN incat_id INT)
BEGIN 

SELECT name, desc 
FROM category
WHERE cat_id = incat_id;

END

Nasıl ben sadece sql ifadeleri kullanarak bu değiştirebilirsiniz?

my previous question daha fazla bilgi için bakınız.

Zaten benim veritabanı bağlantı sınıfta bu işlevi vardır:

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;


 }

Ve ben aslında saklı yordamları aradığım başka bir sınıfta var:

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

 }

2 Cevap

Sadece birleştirme ile sorgu dizesi oluşturmak olabilir ama Rick aşağıda bahseder gibi / validate döküm emin olun. Kullanım mysql_real_escape_string, ya da daha iyisi, hazır deyimleri - Her zaman tüm harici girişleri sterilize

$query = "select name, desc FROM category where cat_id = ".$incat_id;

Sonra PHP mysql_query içine geçmek

$result=mysql_query($query);

Aşağıdaki gibi bir Hazırlanan deyimini kullanın:

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