繁体   English   中英

使用PDO调用具有相同名称的存储过程

[英]Call a stored procedure with the same name using PDO

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

procedure1(:: string,:: integer,:: string,:: integer)

procedure1(:: string,:: integer,:: integer)

在PDO中,正确执行bindParam的是STR,INT,INT,但是优先级始终执行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();

...

它给出的错误是他正在运行一个需要四个参数的过程

尝试更改$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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM