我有一個特殊的MSSQL語句,用於檢索已存在的指定行的標識或INSERT,然後檢索該標識。此SQL似乎在SQL Management Studio以及我的幾個.NET C#應用程序中工作得很好。如何在PHP中使用Microsoft SQL Driver選擇SCOPE_IDENTITY()?
不幸的是,我被要求使用PHP來完成這個特定任務,並且我很難嘗試使用PHP和官方的Microsoft SQL驅動程序。
該語句在INSERT後沒有返回ID(或者如果是,我無法檢索它)。有人可以看看我在哪裏,如果我錯了嗎?
我在Microsoft SQL Driver 3.0中使用PHP 5.3.23。這裏是我的代碼:
$sql = ''
. 'IF (SELECT COUNT(*) FROM users WHERE sAMAccountName = ?) = 0 '
. 'BEGIN '
. 'INSERT INTO users (role, sAMAccountName, fullName) '
. 'VALUES (1, ?, ?) '
. 'SELECT SCOPE_IDENTITY() '
. 'END '
. 'ELSE SELECT id FROM users WHERE sAMAccountName = ?';
$params = array($requester, $requester, $fullName, $requester);
$query = $this->SqlQuery($sql, $params);
function SqlQuery($sql, array $params) {
$conn = $this->SqlConnection(null, null, null, null); // x4 null = use default connection options
$query = sqlsrv_query($conn, $sql, $params);
if ($query) {
sqlsrv_fetch($query);
echo 'Result: ' . sqlsrv_get_field($query, 0); // This should return an ID regardless
sqlsrv_close($conn);
}
}
下面是結果HTML(無結果):
Result:
我對T-SQL不是很熟悉,所以如果我提出廢話,請耐心等待,但......是完整的自包含代碼嗎?這都是一條線,例如沒有分隔符。 INSERT和SELECT。看起來很奇怪它可以運行: - ? –
@ÁlvaroG.Vicario行中唯一依賴行的是行註釋('--')。除了包括多個語句的SQL(和T-SQL)中的所有內容,都可以在沒有任何換行符的情況下編寫。傳統上,語句分隔符(';')並不是必需的,儘管它們是新語句關鍵字('WITH','RECEIVE',..)所必需的,並且將來將需要它們。 – RBarryYoung
@RBarryYoung - 謝謝你的指針。 –