在PDO中插入Postgresql

时间:2014-04-07 18:20:17

标签: php postgresql pdo

我的所有脚本都是用pdo-mysql编写的。现在我正在迁移到posgresql。我一直陷入插入查询。

CREATE TABLE bus_spot
(
    bus_id integer NOT NULL,
    spot_loc_id integer NOT NULL,
    bus_dir_id integer NOT NULL
)

使用php查询

$Bus_Id = 579;
$Bus_Dir_Id = 3;
$User_Loc_Id = 465;

$ISp_Res = $pdo->prepare("INSERT INTO bus_spot(bus_id, bus_dir_id, spot_loc_id) VALUES(?, ?, ?)");
$ISp_Res->execute(array($Bus_Id, $Bus_Dir_Id, $User_Loc_Id));

尝试插入此行时出现以下错误

  

SQLSTATE [22P02]:无效的文本表示:7错误:整数的输入语法无效:\“\”“}

3 个答案:

答案 0 :(得分:2)

对我来说,看起来Postgres对整数的输入格式有点挑剔。尝试使用适当的类型绑定参数,而不是将它们传递给隐式使用字符串

execute()方法
$ISp_Res = $pdo->prepare(...);

$ISp_Res->bindParam(1, $Bus_Id, PDO::PARAM_INT);
$ISp_Res->bindParam(2, $Bus_Dir_Id, PDO::PARAM_INT);
$ISp_Res->bindParam(3, $User_Loc_Id, PDO::PARAM_INT);

$ISp_Res->execute();

答案 1 :(得分:2)

如果该示例是您正在使用的实际代码,那么您的服务器就会被堵塞。 :P你的例子在我的VM中运行得很好。

更有可能的是,您传递给查询的“整数”之一是字符串化为空字符串。对于常量nullfalse,当然还有''就是这种情况。 PostgreSQL对于转换比MySQL更严格,并且通常会抛出错误而不是尝试将字符串转换为整数,如果它看起来不像一个。

看看如果你传递intval($Bus_Id)等而不是按原样传递值会发生什么。如果可行,那么你的价值就会被打破,你需要找出原因。

答案 2 :(得分:0)

您的VALUES

中有4个占位符
VALUES(?,?,?,?)

但你的表/数组只有3个

array($Bus_Id,$Bus_Dir_Id,$User_Loc_Id)

删除1个占位符

VALUES(?,?,?)