gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:57:43 27 4
gpt4 key购买 nike

据我了解,在显式声明数据类型时使用 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();
}

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

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

最佳答案

至少对于 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);

关于php - 如果数据类型与提供的不同,PDO::bindParam/bindValue 是否抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com