如果数据类型与提供的数据类型不同,PDO :: bindParam / bindValue是否会抛出异常?

时间:2017-12-15 14:45:35

标签: php mysql pdo

我的理解是,在显式声明数据类型时使用PDO :: bindParam / bindValue时,如果数据类型与提供的值不同,则会引发异常。

摘自用于连接到mysql数据库的db类

public function insert($sql, $values){
    $stmt = $this->connect()->prepare($sql);
    foreach($values as $value){
        $stmt->bindValue($value[1], $value[2], $value[3]);
    }
    $stmt->execute();
}

$array = array(
    0 => array(
        1 => ':jotName',
        2 => 'some jot string',
        3 => PDO::PARAM_STR

    )
);

$iSql = "INSERT INTO `jots`(`jotContext`) VALUES (:jotName)";

$con = new sql();
try{
    $con->insert($iSql,$array);
} catch(PDOException $exception) {
    echo $exception->getMessage();
}

即。如果PDO :: PARAM_STR在$ array [0] [3]中更改为PDO :: PARAM_INT,则mysql事务将失败,因为$ array [0] [2]是一个字符串而不是int。

我使用PDO :: PARAM_STR,PDO :: PARAM_INT和&amp ;;测试了这个代码块。 PDO :: PARAM_BOOL。虽然我期望_STR正常运行并将新记录插入数据库。我没想到_BOOL& _INT在调用insert方法时不抛出异常。

1 个答案:

答案 0 :(得分:2)

至少对于mysql - 不,它永远不会抛出错误。

此外,99.99% of time mysql is happy with PDO::PARAM_STR适用于任何类型。因此,您可以大大简化插入函数,省略$ values数组中的所有不必要的东西:

public function insert($sql, $values){
    return $this->connect()->prepare($sql)->execute($values);
}
$array = array('jotName' => 'some jot string');
$db->insert($sql, $array);