2015-08-26 37 views
1

我正在嘗試運行SQL存儲過程,並且正在使用PHP的PDO類將執行命令傳遞到服務器。以下是我現在的腳本:將PHP字符串傳遞爲SQL命令並保留換行符

$db = new PDO("dblib:dbname=databaseName;host=hostName", databaseUser, databasePassword); 
$query = " 
    USE [thisDatabase] 
    GO 
    DECLARE @return_value int 
    EXEC @return_value = [dbo].[thisSproc] 
      @State = 'GA', 
      @Type = 'Counseling', 
      @PVCampusVueCode = NULL 
    SELECT 'Return Value' = @return_value 
    GO"; 
$stmt = $db->prepare($query); 
$stmt->execute(); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

請注意,該查詢直接在數據庫本身上運行時,會正確返回結果而不會出錯。

但是,當我使用我的PHP腳本運行它並解析結果時,在'GO'(SQL錯誤102)附近出現語法錯誤。原來這是因爲命令是作爲單行傳遞給SQL服務器,沒有換行符。因此,它結束了看起來像這樣:

USE [thisDatabase] GO DECLARE @return_value int EXEC @return_value = [dbo].[thisSproc] @State = 'GA', @Type = 'Counseling', @PVCampusVueCode = NULL SELECT 'Return Value' = @return_value GO 

這是一個問題,因爲很明顯的「GO」命令必須是在它自己的路線。

我環顧四周尋找解決方法,找不到一個。我該如何保留換行符以便查詢正確執行,或者以其他方式解決問題?

+1

只要刪除'GO's。在調用過程時使用'[thisDatabase]。[dbo]。[thisSproc]'。你可以用其餘的分號分開。 –

+0

GO不是一個sql語句。它是SSMS中的默認批終止符。同樣當你想從一個過程返回一個值時,你應該使用一個OUTPUT參數。返回值旨在返回一個狀態碼,指示執行過程的狀態。 –

回答

1

只需將您的查詢作爲單獨的query()調用運行即可。