【发布时间】:2016-09-08 22:27:06
【问题描述】:
我正在重构我的一些旧代码,并正在创建一个带有 INSERT 函数的数据库类。出于测试目的,我将它留在了课堂之外,并希望让它处理错误。
我想删除 php 错误并返回我自己的错误。目前我有以下内容,并且在重复键上插入时可以正常工作,但是当我测试从 bind_param 中删除类型参数时,出现以下错误:
警告:mysqli_stmt::bind_param():第 17 行 /home/matt500b/csgoberry/public/catch.php 中的类型无效或未指定类型
执行语句失败:没有为准备好的语句中的参数提供数据
如何删除警告问题并仅保留返回的字符串?或者对于生产服务器来说,这种操作的最佳方法是什么。
关于 mysqli 查询,我还可以模拟哪些其他错误?
function INSERT($link, $sql, $args=null) {
if ($stmt = $link->prepare($sql)) {
for($i=0; $i<count($args); $i++) {
$stmt->bind_param($args[$i]["type"], $args[$i]["value"]);
}
if(!$stmt->execute()) {
return 'Executing the statement failed: ' . htmlspecialchars($stmt->error);
exit();
}
}
else {
return 'Preparing the statement failed: ' . htmlspecialchars($link->error);
exit();
}
return 'Finished';
}
$query = "INSERT INTO insertTest (`value`) VALUES (?)";
$queryArgs[] = array("type"=>"", "value"=>"test1");
echo INSERT($link, $query, $queryArgs);
【问题讨论】:
-
try catch? stackoverflow.com/questions/17549584/… -
我正在模拟错误以正确捕获和显示所有错误。我故意将
"type"=>""留空。因此,投票不会重复作为关于如何处理此类错误的问题 -
在执行过程中尝试了 try/catch,但是我的自定义错误没有显示,只有 php 警告错误显示
-
Try/catch 是针对异常而不是 php 警告或错误。不要认为你可以使用 MySqli 类来实现这一点,但你当然可以使用 PDO 类来实现。
-
生产服务器通常会关闭错误报告,因此您不会在那里看到警告。如果你同意的话。