我在基于php的Web应用程序中有一个简单的数据库驱动的Semaphore,它使用windows的sqlsrv扩展和linux / max的mssql。
我正在运行的查询如下:
BEGIN TRY
INSERT INTO Semaphores VALUES (:name, :process_id)
END TRY
BEGIN CATCH
SELECT 'false' AS Result
END CATCH
此查询在SQL Server管理工作室中完美运行。它也适用于mssql扩展。但是在sqlsrv中,catch查询从不执行(或者至少结果不可用)。
代码如下:
$results = sqlsrv_query($this->connection, $built_query);
/* Error handling here left out for brevity */
$row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC);
if ($row === FALSE)
{
// The insert worked so no rows exist causing the fetch array to fail.
return true;
}
else
{
// The select executed. Don't actually care about the contents.
// This means the insert failed.
return false;
}
$row
始终为FALSE(ERROR STATE)。无论查询是什么样的。我可以自己强制查询的任一分支,它可以按预期工作。
为什么sqlsrv_fetch_array
没有获得捕获结果?