我的理解是,在显式声明数据类型时使用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方法时不抛出异常。
答案 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);