PHP PDO MySql - 插入偶尔未定义的变量

时间:2011-05-19 23:03:55

标签: php mysql pdo

更复杂问题的简化示例...
有时定义变量,有时不定义变量。在没有检查变量是否为空的情况下,有没有办法在不破坏查询的情况下执行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可能不存在。

为什么“没有检查变量是否为空”?该网站的主要基础发生了变化,并且会有大量的变量检查。是的,我知道不应该这样,但这是我继承的问题。

2 个答案:

答案 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);