0

データベースPostgresに2つのストアドプロシージャがあり、どちらも同じ名前ですが、違いはパラメータです。

procedure1(:: string、:: integer、:: string、:: integer)

procedure1(:: string、:: integer、:: integer)

bindParamを正しく実行するPDOでは、STR、INT、INTが発生しますが、prepereは常にprocedure1を実行します。

私がprocedure2と呼んでいるものを彼に理解させるにはどうすればよいですか?

さらにヘルプが必要な情報はありますか?クリア?ありがとう

編集===

..。

$bounds = null; // forced for debug

if(!is_null($bounds)){
  $query = "SELECT procedure1(:name, :domain, :geo, :userid)";
  $stmt = $db->prepare($query);
  $stmt->bindParam('name', $name, PDO::PARAM_STR);
  $stmt->bindParam('domain', $idDomain, PDO::PARAM_INT);
  $stmt->bindParam('geo', $geoString, PDO::PARAM_STR);
  $stmt->bindParam('userid', $userId, PDO::PARAM_INT);   
}else{
  $query = "SELECT procedure1(:name, :domain, :userid)";
  $stmt = $db->prepare($query);
  $stmt->bindParam('name', $name, PDO::PARAM_STR);
  $stmt->bindParam('domain', $idDomain, PDO::PARAM_INT);
  $stmt->bindParam('userid', $userId, PDO::PARAM_INT); 
}
$result = $stmt->execute();

..。

それが与えるエラーは、彼が4つのパラメーターを必要とするプロシージャを実行していることです。

4

1 に答える 1

0

ステートメントを変更して$query、明示的に PDO に型を伝え、余分なコードの切り替えを回避しますbindValue(PDO は、データ型をキャストするのではなく、SQL をフォーマットするために PARAM フラグを使用します)。

$bounds = null; // forced for debug

if(!is_null($bounds)){
  $query = "SELECT procedure1(:name::VARCHAR, :domain::INTEGER, :geo::VARCHAR, :userid::INTEGER)";
  $stmt = $db->prepare($query);
  $stmt->bindValue('name', $name);
  $stmt->bindValue('domain', $idDomain);
  $stmt->bindValue('geo', $geoString);
  $stmt->bindValue('userid', $userId);
}else{
  $query = "SELECT procedure1(:name::VARCHAR, :domain::INTEGER, :userid::INTEGER)";
  $stmt = $db->prepare($query);
  $stmt->bindValue('name', $name);
  $stmt->bindValue('domain', $idDomain);
  $stmt->bindValue('userid', $userId); 
}
$result = $stmt->execute();
于 2012-12-14T15:33:36.347 に答える