问题描述
||
一个更复杂的问题的简化示例...
有时定义变量,有时未定义。不检查变量是否为空,有没有一种方法可以执行插入语句而不会破坏查询?
$stmt = $this->db->prepare(\"INSERT INTO employment (user_id,start_date,end_date) VALUES (:user_id,:start_date,:end_date) \");
$stmt->bindParam(\':user_id\',$user->id,PDO::ParaM_INT);
$stmt->bindParam(\':start_date\',$work->start_date,PDO::ParaM_STR);
$stmt->bindParam(\':end_date\',$work->end_date,PDO::ParaM_STR);
$stmt->execute();
有时$work->end_date
可能不存在。
为什么“不检查变量是否为空”?该站点的主要基础发生了变化,将进行大量的变量检查。是的,我知道不应该这样,但这是我继承的问题。
解决方法
您总是可以尝试将一个包装器写入
bindParam
,这将检查您的变量是否已定义。如果是,则继续执行bindParam,否则将跳过它。
像这样称呼它
bindSafeParam(&$stmt,\':start_date\',$work->start_date,PDO::PARAM_STR);
,如果$ work-> end_date不存在,则具有默认值吗?
像这样:
$end_date = empty($work->end_date)? 0 : $work->end_date
$stmt->bindParam(\':end_date\',$work->end_date,PDO::PARAM_STR);