Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果数据类型与提供的不同,PDO::bindParam/bindValue是否引发异常?_Php_Mysql_Pdo - Fatal编程技术网

Php 如果数据类型与提供的不同,PDO::bindParam/bindValue是否引发异常?

Php 如果数据类型与提供的不同,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::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能够正常工作,并在数据库中插入一条新记录。我不希望在调用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);