0
私はこのSPを使用していますが、mysql workbenchを使用しているときに両方の結果を得ています。 PDO出力パラメータエラー
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として
- カウントとカウントの違いは何ですか?
- pdoで正確なカウントを取得するにはどうすればよいですか?
':count'はプリペアドステートメントのプレースホルダは、どんなライブラリによって記入されます/あなたがデータベースと話すために使用している言語。 '@ count'はデータベース側のサーバ変数です。 '@ count'が別のクエリによって以前に設定されていなかった場合、それはnullに評価されます。 –
しかし、私はPHPマニュアルの準備文からの例に従っています。彼らは、mysqlカーソルから返された出力を取り出すためにプレースホルダだけを使用しています。 – DON