2011-05-19 39 views
1

一个更复杂问题的简单例子...
变量有时被定义,有时不是。如果没有检查变量是否为空,是否有一种方法可以在不中断查询的情况下执行插入语句?PHP PDO MySql - 偶尔插入一个未定义的变量

$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可能不存在。

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

+1

你能不只是传递'NULL'值的'_STR'类型?你会得到什么样的问题/ errormsg? – mario 2011-05-19 23:19:07

+0

删除此问题。数据库模式中的错误导致查询无法正常工作。 PDO仍然会接受一个不存在的变量,并且默认为NULL。因此不需要这个问题。 – csi 2011-05-20 00:08:12

+0

INSERT IGNORE?但是这需要修改插入语句。尽管在$ this-> db-> prepare(“INSERT INTO ...”)上执行搜索和替换操作会很容易,而且很危险..哈。 – mardala 2011-05-20 01:05:41

回答

0

你总是可以尝试写一个包装bindParam这将检查你的,如果你的变量定义。如果是,则继续并bindParam,否则跳过它。

这样称呼它

bindSafeParam(&$stmt, ':start_date', $work->start_date, PDO::PARAM_STR);

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

请参阅上文:问题显示“没有检查变量是否为空”。为答案,但不是我在找什么。 – csi 2011-05-19 23:15:33