检查pdo-php插入成功


$hpaystmt = $con->_con->prepare(".....");

object(PDOStatement)#7(1){["queryString"]=>string(1515)"插入hpay(enccode、orno、hpercode、acctno、amt、curcode、paytype、paycode、entryby、payctr、chrgcode、itemcode、chrgtbl DR','DR1','MISC')"}===对象(PDOStatement)#8(1){["queryString"]=>string(1517)"插入hpay(enccode,orno,hpercode,acctno,amt,curcode,paytype,paycode,entryby,payctr,chrgcode,itemcode,chrgtbl)值('0000060000000000101783710/14/201722:00:00',00000000033',000000001017837','2017-000165903','100','PESO','F','C','','2','BIRTC','085','MISC')"}

我从获得上述代码

ini_set('display_errors', 1);
var_dump($hpaystmt);
$hpayinsert = $hpaystmt->execute();
echo "==";
echo $hpaystmt->execute() === TRUE ;
echo "==";

我的目的是检查插入是否成功,但echo $hpaystmt->execute() === TRUE ;这一行总是返回空白,这就是为什么我总是得到回声中的CCD_ 2;

我没有从显示错误中得到任何错误,而且我把它包装在try-catch中,我总是在try-part not catch中进行。

如何检查成功插入?

其他信息:

我想检查是否成功,如果失败,我想回滚数据库,我的var$hpayinsert设置为$hpayinselt=true;插入之前。然后在我检查true或false之后,根据变量的值提交或回滚

更新:

在放入print_r($hpaystmt->errorInfo());之后,我得到:

Array([0]=>22001[1]=>8152[2]=>[Microsoft][ODBC SQL Server Driver][SQL Server]字符串或二进制数据将被截断。]=>22001)

您不需要它

在PDO中处理插入操作的结果有三种可能的场景:

  1. 要判断成功,不需要验证。保持你的程序流程
  2. 要处理意外错误,请使用相同的-不需要立即处理代码。在数据库错误的情况下,将抛出一个异常,它将冒泡到站点范围的错误处理程序,最终将导致一个常见的500错误页面
  3. 要处理预期的错误,如重复主键,,如果您有特定的场景来处理这个错误,则使用try..catch运算符

对于一个普通的PHP用户来说,这听起来有点奇怪-这是怎么回事,而不是验证操作的直接结果?-但这就是异常的工作方式-您可以在其他地方检查错误。一劳永逸。非常方便。

因此,在一般情况下,您根本不需要任何处理代码。保持你的代码原样。

我写了一篇关于PHP错误报告基础的文章,详细解释了这件事,你可能会发现它很有用

只有在处理场景而不是报告错误的情况下,您才能捕捉到错误。例如,回滚事务。代码取自我的PDO教程:

try {
$pdo->beginTransaction();
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)");
foreach (['Joe','Ben'] as $name)
{
$stmt->execute([$name]);
}
$pdo->commit();
}catch (Exception $e){
$pdo->rollback();
throw $e;
}

也许可以尝试捕获

ini_set('display_errors', 1);
var_dump($hpaystmt);
try{
$hpaystmt->execute();
echo "It's a success";
}
catch(Exception $e)
{
echo "Something went wrong";
}

最新更新