【发布时间】: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