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
可能不存在。 为什么“不检查变量是否为空”?该站点的主要基础发生了变化,将进行大量的变量检查。是的,我知道不应该这样,但这是我继承的问题。     

解决方法

您总是可以尝试将一个包装器写入
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);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...