更复杂问题的简化示例...
有时定义变量,有时不定义变量。在没有检查变量是否为空的情况下,有没有办法在不破坏查询的情况下执行insert语句?
$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
可能不存在。
为什么“没有检查变量是否为空”?该网站的主要基础发生了变化,并且会有大量的变量检查。是的,我知道不应该这样,但这是我继承的问题。
答案 0 :(得分:0)
如果$ work-> end_date不存在,是否有默认值?
这样的事情:
$end_date = empty($work->end_date)? 0 : $work->end_date
$stmt->bindParam(':end_date', $work->end_date, PDO::PARAM_STR);
答案 1 :(得分:0)
您总是可以尝试将包装器写入bindParam
,这将检查您是否定义了变量。如果它然后它继续和bindParam否则它跳过它。
称之为
bindSafeParam(&$stmt, ':start_date', $work->start_date, PDO::PARAM_STR);