检查pdo php插入成功

时间:2017-10-18 08:03:14

标签: php sql-server pdo

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

object(PDOStatement)#7(1){[“queryString”] => string(1515)“INSERT INTO hpay(enccode,orno,hpercode,acctno,amt,curcode,paytype,paycode,entryby,payctr,chrgcode,itemcode,chrgtbl)VALUES('000060000000000101783710/14/201722:00:00',' 00000000033','000000001017837','2017-000165903','1500','PESO','F','C','','1','DR','DR1','MISC')“} ==== object(PDOStatement)#8(1){[“queryString”] => string(1517)“INSERT INTO hpay(enccode,orno,hpercode,acctno,amt,curcode,paytype,paycode,entryby,payctr,chrgcode,itemcode,chrgtbl)VALUES('000060000000000101783710 / 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 ;这一行总是返回空白,这就是为什么我得到了 回声中}====;

我没有从显示错误中得到任何错误,我也将它包装在try catch中,并且我总是尝试不捕获。

如何检查此成功插入?

其他信息:

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

更新:

放下print_r($hpaystmt->errorInfo());之后

  

数组([0] => 22001 [1] => 8152 [2] => [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断。(SQLExecute [8152 ]在\ text \ pdo_odbc \ odbc_stmt.c:254)[3] => 22001)数组([0] => 22001 [1] => 8152 [2] => [Microsoft] [ODBC SQL Server驱动程序] ] [SQL Server]字符串或二进制数据将被截断。(SQLExecute [8152] at ext \ pdo_odbc \ odbc_stmt.c:254)[3] => 22001)

2 个答案:

答案 0 :(得分:4)

你不需要它。

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

  1. 要说明成功,不需要验证。请保持您的计划流程。
  2. 要处理意外错误,保持相同的 - 不需要立即处理代码。如果发生数据库错误,将抛出异常,并且它将冒泡到站点范围的错误处理程序,最终将导致共同的500错误页面。
  3. 要处理预期的错误,例如重复的主键,,如果您有某个方案来处理此错误,请使用try..catch运算符。
  4. 对于普通的PHP用户来说,这听起来有些陌生 - 怎么样,不验证操作的直接结果? - 但这就是例外的工作原理 - 您可以在其他地方检查错误。一次就好。非常方便。

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

    我写了一篇关于PHP error reporting basics的文章,详细解释了这个问题,你可能会发现它很有用

    仅在您有处理方案的情况下,除了报告错误之外,您可能会收到错误。例如,回滚事务。代码取自我的PDO tutorial

    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;
    }
    

答案 1 :(得分:0)

也许试试看

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