альтернатива хранимым процедурам - PullRequest
1 голос
/ 06 января 2010

У меня проблемы с использованием хранимых процедур. Выполнение вызова хранимой процедуры не работает для меня. Поэтому я заменил хранимую процедуру оператором 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);

 }

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Используйте подготовленный оператор, как показано ниже:

$pdo = new PDO(...);
$statement = $pdo->prepare('SELECT name, desc FROM category WHERE cat_id = ?');
$statement->execute(array(10)); // incat_id
$rows = $statement->fetchAll();
0 голосов
/ 06 января 2010

Вы можете просто построить строку запроса с конкатенацией, но, как упоминает Рик ниже, обязательно приведите / подтвердите. Всегда очищайте все внешние входные данные - используйте mysql_real_escape_string или, что еще лучше, подготовленные операторы

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

Затем передайте это в PHP mysql_query

$result=mysql_query($query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...