【发布时间】:2018-05-29 21:24:16
【问题描述】:
在处理整数值 0 时,让 PDO 像我需要的那样工作时遇到了一点麻烦。
在模拟订单系统中,final_status0 代表成功下单。顺序错误会导致 final_status 的非零整数,例如 14、5 等。不完整的订单需要一个实际的 NULL final_status 值
这是示例表结构:
CREATE TABLE `order_status` (
`order_id` int(10) NOT NULL,
`final_status` int(10) DEFAULT NULL,
`date_status` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
更新订单时,我遇到了一个问题,即 PDO 将 0 的 final_status 设置为 NULL,或者将实际的 NULL/空白值设置为 0(取决于我在绑定语句中声明的常量) .
所以,假设:
$final_status = 0000;
$order_id = 123456;
更新查询:
try
{
$q = "
UPDATE
order_status
SET
final_status = :final_status
WHERE
order_id = :order_id
";
$stmt = $dbx_pdo->prepare($q);
$stmt->bindValue(':final_status', !empty($final_status) ? $final_status : NULL, PDO::PARAM_NULL);
$stmt->bindValue(':order_id', !empty($order_id) ? $order_id : NULL, PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
} catch(PDOException $err) {
error_handler();
}
如果我将 PARAM_NULL 用于第一个 bindParam 常量,则“0000”值或空白值将转换为 NULL,这会产生假阴性。
如果我使用 PARAM_INT,'0000' 值或空白值将被转换为 0,这会产生误报并且很糟糕。
那么,表定义是罪魁祸首,还是有办法用 INT 做我想做的事?
【问题讨论】: