【发布时间】:2015-09-11 05:42:39
【问题描述】:
我正在使用带有sqlsrv_query 的 PHP,并且遇到了一个问题,即 SQL 错误不是...导致错误。
比如这段代码中user_id 1已经存在
$sqlresult = sqlsrv_query($db_conn, "INSERT into dbo.users( user_id, name)
VALUES( 1, 'Adam');");
if( $sqlResult === false ) {
echo "\nSQL result indicated a failure\n";
die( print_r( sqlsrv_errors(), true));
}
$sqlresult 不为假,尽管 sql 查询因主键冲突而失败。
SQL Studio 显示如下
Msg 2627, Level 14, State 1, Line 2
Violation of PRIMARY KEY constraint 'PK_users'. Cannot insert duplicate key in object 'dbo.users'. The duplicate key value is (1).
The statement has been terminated.
如果我尝试使用错误数据类型的 INSERT,即 user_id 的“xyz”,我看不到“语句已终止。”。如果从 PHP 执行,$sqlresult 是正确的 false。
需要修复主键违规问题,但我担心某些“类型”的错误会被默默忽略。
任何想法为什么一种类型的错误与另一种错误不同?
【问题讨论】:
-
我认为这与使用的驱动程序有关。
sqlsrv_query没有出现在 PHP 手册中,这意味着它不是 PHP 的官方库或驱动程序。这使得库和/或驱动程序的开发人员负责。 -
我可以想象。但也许 sql studio 返回带有 PK 违规错误但不是数据类型错误的“语句终止”的方式有线索?
-
我实际上刚刚实现了一个新表,发现 PK 违规正确返回 $sqlresult 为 false。所以我不知道发生了什么,我得回去调查一下。
标签: php sql-server