【问题标题】:MSSQL UPDATE works but INSERT failsMSSQL UPDATE 有效,但 INSERT 失败
【发布时间】:2016-06-28 15:34:14
【问题描述】:

我从 2 天开始就开始了,但无法弄清楚这种情况。

我正在使用 PHP 5.5 和 MSSQL,我似乎无法在某些表中插入,而更新适用于该表,而相同的插入适用于另一个表。

当然,我已经检查过我的用户在此表上拥有正确的权限。

这是代码,也许我很笨......

// Establish connection
try {
    $pdo = new PDO(DSN, UID, PWD);
} catch (PDOException $e) {
    die("Error! ".$e->getMessage());
}

$pdo->beginTransaction();

// Merge-like event
try {
   $updateStmt->execute();
   $rows = $updateStmt->rowCount();
   if($rows == 0) {
      $insertStmt->execute();
   }
} catch (Exception $e) {
    $pdo->rollBack();
    die("Error! ".$e->getMessage());
} finally {
    $insertHistoryStmt->execute();
    $pdo->commit();
}

我所有的 PDO 语句对象都是正确的,具有合适的值。 我在 INSERT 上没有任何错误,似乎它似乎从未在数据库上执行过。

请询问您是否需要更多代码来理解我不想把我的整个代码放在这里并说“请做我的工作”。

谢谢我真的卡住了:/

【问题讨论】:

  • pdo 默认在失败时返回布尔值 false。除非您明确启用异常,否则它会抛出的唯一异常是在初始连接尝试时。因此,您的 try/catch 毫无用处,因为您在其中所做的任何操作都不会首先引发异常。
  • 只需按照here 的说明配置 PDO,使其抛出异常。另请注意,您应该重新抛出异常,而不是手动终止脚本。
  • 谢谢。我明天早上会做,今晚我必须将应用程序推向生产。祝你有个愉快的夜晚
  • 好的。谢谢!显示的错误很清楚我能够纠正我的错误,即“bindValues 不能具有相同的名称,即使它们的值相同”。它不知道为什么它在 Oracle 数据库上运行良好,并且这个错误只在 MSSQL 上出现,因为它处理 PDO 比数据库更多,但现在它适用于两者。我用您提到的精彩教程的链接将问题标记为已回答。祝你有美好的一天

标签: php sql-server pdo


【解决方案1】:

现在我找到了错误源,也许我的问题的标题不合适。但我写下这个答案是因为它是一个很棒的教程,它解释了如何调试我们自己的不同错误。

如果你抛出任何 PDO 错误,请关注this link,你会找到方法的。 感谢@Your Common Sense 提供了一种学习解决错误的方法,而不是一个现成的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多