Ошибка выходного параметра PDO - PullRequest
0 голосов
/ 11 февраля 2012

Я использую этот SP, получаю оба результата при использовании mysql workbench.

CREATE PROCEDURE SP(IN _start INT,IN _end INT,INOUT _count INT)
BEGIN

   SET _count = (SELECT COUNT(*) FROM tbl);

   SET @qry = CONCAT('select * from tbl limit ', _start, ',', _end);

   PREPARE stmt FROM @qry;
   EXECUTE stmt;
   DEALLOCATE PREPARE stmt;

END

Но при использовании с PDO я возвращаю эту ошибку

$c=0;
$stmt = $this->_dbc->getConnection()->prepare("CALL SP(0,10,:count)");
    $stmt->bindParam(":count",$c,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,0);
    $stmt->execute();
    return $c;
PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 3 for routine db22.SP is not a variable or NEW pseudo-variable in BEFORE trigger

Но при изменении

$this->_dbc->getConnection()->prepare("CALL SP(0,10,**:count**)");

до

$this->_dbc->getConnection()->prepare("CALL SP(0,10,@count)");

Я не возвращаю никакой ошибки, но всегда получаю счет как 0.

  1. Какая разница между: count и @count?
  2. Как получить точный счет через pdo?

1 Ответ

4 голосов
/ 20 апреля 2012

Вы можете сделать следующее решение:

$dbh = $this->_dbc->getConnection()
$stmt = $dbh->prepare("CALL SP(0,10,@count)");
$stmt->execute();

$sql = "SELECT @count AS count";
$stmt = $dbh->prepare($sql);
$stmt->execute();

Вы можете найти больше здесь: http://www.php.net/manual/en/pdo.prepared-statements.php#101993

...