【发布时间】:2021-10-08 14:16:32
【问题描述】:
我正在使用 PDO 对 PostgreSQL 进行动态更新查询。问题是,所有值都作为字符串传输到数据库,这会为假定的布尔值(edit: 和整数)值引发错误:
PHP 致命错误:未捕获的 PDOException:SQLSTATE[22P02]:无效文本表示:7 错误:布尔类型的无效输入语法:»«
编辑:每当布尔或整数字段获得空输入时,就会出现问题。我该怎么做才能使 PDO 将输入作为“null”传输到数据库,而不是抛出数据类型错误的空字符串?
以下是我的更新方法,我尝试在循环内进行绑定,并为两个假定的布尔值添加显式类型转换:
public function updateMod($array)
{
$keys = array_keys($array);
$vals = array_values($array);
$setStr = "";
foreach ($keys as $key) {
$setStr .= "$key = :$key, ";
}
$setStr = rtrim($setStr, ", ");
$pdoConn = DbConnection::openConnection();
$stmt = $pdoConn->prepare("UPDATE mods SET $setStr WHERE id = :id;");
$i = 0;
foreach ($keys as $key) {
// type casting the two supposed booleans:
if($key === 'g_exists' || $key === 'w_exists') {
$stmt->bindValue($key, $vals[$i], PDO::PARAM_BOOL);
} else {
$stmt->bindValue($key, $vals[$i]);
}
$i++;
}
$stmt->bindValue('id', $this->Id());
if ($stmt->execute()) {
return true;
} else {
return false;
}
}
但我不断收到同样的错误。 有谁知道如何解决这个问题?
【问题讨论】:
标签: php postgresql dynamic pdo boolean