我们有类似以下 PDO 语句,用于与 PostgreSQL 8.4 DB 进行通信。
$st = $db -> prepare("INSERT INTO Saba.Betriebskosten (personalkosten)
VALUES(:kd_personalkosten)");
$st -> bindParam(':kd_personalkosten', $val['kd_personalkosten']);
$val['kd_personalcosten'] 为空/null 或包含双精度值。在它为空/空的情况下,我们只想插入一个空值,但我们收到以下错误:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type double precision: '';
这意味着空/空会转换为与双精度字段不兼容的空字符串。如何规避这个错误?
在我看来,值是“”(空字符串),bindParam 在 SQL 查询中将其转换为“”,并且由于 individualkosten 是 Double 类型,因此会引发错误。
这应该可以解决空文本到双重转换的问题:
$st -> bindParam(':kd_personalkosten', (float) $val['kd_personalkosten']);
如果你确实想在变量为空时插入 NULL 值,那么你应该这样做:
$value = $val['kd_personalkosten'];
if ($value === '' or $value === NULL) {
$st->bindValue(':kd_personalkosten', NULL, PDO::PARAM_NULL); // note the bindValue() instead of bindParam()
} else {
$st->bindParam(':kd_personalkosten', $value);
}
About 绑定值与绑定参数来自 PHP 手册:
绑定参数()
将 PHP 变量绑定到相应的命名或问号
用于准备的 SQL 语句中的占位符
陈述。与 PDOStatement::bindValue() 不同,变量绑定为
一个参考,只会在当时进行评估
调用 PDOStatement::execute()。
大多数参数是输入参数,即参数
以只读方式用于构建查询。部分司机
支持调用将数据作为输出返回的存储过程
参数,有些还作为输入/输出参数发送
数据并更新以接收它。
基本上,bindValue 允许您绑定直接值或常量,而 bindParam 需要传入变量或引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)