0

我的数据库 Postgres 中有两个存储过程,它们的名称相同,但参数不同。

过程 1(::string, ::integer, ::string, ::integer)

过程 1(:: 字符串,:: 整数,:: 整数)

在 PDO 中正确地执行 bindParam,即将到来 STR、INT、INT 但 prepere 始终执行 procedure1。

我如何让他理解我所说的程序2?

一些信息以获得更多帮助?我清楚吗?谢谢

编辑 ===

...

$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

1 回答 1

0

尝试更改$query语句以明确告诉 PDO 类型,并避免额外的代码切换到bindValue(PDO 使用 PARAM 标志来格式化 SQL,而不是强制转换数据类型):

$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 回答