Php 如果数据类型与提供的不同,PDO::bindParam/bindValue是否引发异常?
我的理解是,在显式声明数据类型时使用PDO::bindParam/bindValue时,如果数据类型与提供的值不同,则会引发异常 摘自用于连接mysql数据库的db类 也就是说,如果PDO::PARAM_STR在$array[0][3]中更改为PDO::PARAM_INT,mysql事务将失败,因为$array[0][2]是字符串而不是INTPhp 如果数据类型与提供的不同,PDO::bindParam/bindValue是否引发异常?,php,mysql,pdo,Php,Mysql,Pdo,我的理解是,在显式声明数据类型时使用PDO::bindParam/bindValue时,如果数据类型与提供的值不同,则会引发异常 摘自用于连接mysql数据库的db类 也就是说,如果PDO::PARAM_STR在$array[0][3]中更改为PDO::PARAM_INT,mysql事务将失败,因为$array[0][2]是字符串而不是INT 我已经使用PDO::PARAM_STR、PDO::PARAM_INT和PDO::PARAM_BOOL测试了这个代码块。而我希望_STR能够正常工作,并在数
我已经使用PDO::PARAM_STR、PDO::PARAM_INT和PDO::PARAM_BOOL测试了这个代码块。而我希望_STR能够正常工作,并在数据库中插入一条新记录。我不希望在调用insert方法时,\u BOOL&\u INT不会引发异常。至少对于mysql来说是这样-不,它永远不会引发错误 此外,对于任何类型。因此,您可以大大简化insert函数,省去$values数组中所有不必要的内容:
public function insert($sql, $values){
return $this->connect()->prepare($sql)->execute($values);
}
$array = array('jotName' => 'some jot string');
$db->insert($sql, $array);
如果您使用的是
PDO::ATTR\u EMULATE\u PREPARES
,这可能会改变,但mysql或php通常会在可能的情况下强制转换参数。我猜这就是正在发生的事情。它可能是类型转换而不是验证。您是否检查了sql以查看值是否实际。。。对的就像某些jot字符串变为零一样。@bassxzero-setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)
是唯一设置的属性。@IncredibleHat-无论指定的数据类型是什么,一些jot字符串
都会添加到数据库中。@jax这很好。我想说的是,如果设置PDO::ATTR\u EMULATE\u
。然后PHP将进行转换。如果您不这样做,那么MySQL将进行角色转换。不管怎样,我认为这是一个铸造问题。所以我现在的问题转向PDO::PARAM_x的要点是什么。即,我的逻辑是:获取数据、验证/清理数据、绑定数据、执行。虽然我理解@bassxzero对类型转换的看法。如何将字符串类型转换为int。这没有多大意义,但在一些边缘情况下,它可能会很有用,
public function insert($sql, $values){
return $this->connect()->prepare($sql)->execute($values);
}
$array = array('jotName' => 'some jot string');
$db->insert($sql, $array);