我的所有脚本都是用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错误:整数的输入语法无效:\“\”“}
答案 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中运行得很好。
更有可能的是,您传递给查询的“整数”之一是字符串化为空字符串。对于常量null
和false
,当然还有''
就是这种情况。 PostgreSQL对于转换比MySQL更严格,并且通常会抛出错误而不是尝试将字符串转换为整数,如果它看起来不像一个。
看看如果你传递intval($Bus_Id)
等而不是按原样传递值会发生什么。如果可行,那么你的价值就会被打破,你需要找出原因。
答案 2 :(得分:0)
您的VALUES
VALUES(?,?,?,?)
但你的表/数组只有3个
array($Bus_Id,$Bus_Dir_Id,$User_Loc_Id)
删除1个占位符
VALUES(?,?,?)