2016-03-15 83 views
0

我需要得到的ID陣列的用戶的加入到數據庫函數中:插入值返回標識的PDO以MSSQL使用ODBC

function insert_test($pdo, $fullname, $email) { 
if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) { 
    $SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR); 
    $SQL->bindValue(':email', $email, PDO::PARAM_STR); 
    $SQL->execute(); 

    return array('status'=> true); 
} else { 
    return array('status'=> false); 
} 
} 

但是我首先要弄清楚如何獲得都有點吃力價值觀和陣列內歸還,像這樣:

return array('status'=> true,'ids'=> $ids); 

我已閱讀並發現SCOPE_IDENTITY()可能獲得這些價值的最可靠的方法,但我不知道在哪裏把它放在這個功能返回我需要的值。數據庫中的主鍵是id列。

難道是這樣的:

if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) VALUES (GETDATE(), GETDATE(), :fullname, :email, 1) SELECT SCOPE_IDENTITY()")) 

,然後綁定一個參數後調用$ IDS還是我在完全想這個?

任何幫助將不勝感激!

編輯:我一直在使用類似功能的一個在this question嘗試過,並取得不合法的遊標錯誤,以便適應它看起來像這樣(請注意closeCursor是如何解決無效指針錯誤):

function insert_test($pdo, $fullname, $email) { 
    if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) { 
     $SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR); 
     $SQL->bindValue(':email', $email, PDO::PARAM_STR); 
     $SQL->execute(); 
     $SQL->closeCursor(); 
     $ids = $SQL->fetchAll(PDO::FETCH_ASSOC); 

     return array('status'=> true, 'id' => $ids); 
    } else { 
     $pdo = null; 
     return array('status'=> false); 
    } 
} 

從這個函數的返回,現在是這樣的:

Array 
(
    [status] => 1 
    [id] => Array 
     (
     ) 
) 

所以看起來輸出不工作,因爲它應該?這是越來越陌生和陌生...

+0

爲什麼你使用複數形式?任何理由你期望多個ID? –

+0

是的,對不起,我應該在問題中概述了這一點,我將一次接收一組訂閱者,並且需要在插入它們時獲取每個訂閱者的ID,所以也許這個函數會放在一個foreach循環中以獲得每一個?那有意義嗎? – LewisJWright

+0

我不知道MS SQL,但可能如此 –

回答

0

把它弄出來的傢伙!

有與closeCursor();方法的位置的問題的功能現在看起來像這樣:

function insert_test($pdo, $fullname, $email) { 
    if ($SQL = $pdo->prepare("INSERT INTO subscribers ([dateAdded],[dateUpdated],[fullname],[email],[isActive]) OUTPUT INSERTED.id VALUES (GETDATE(), GETDATE(), :fullname, :email, 1)")) { 
     $SQL->bindValue(':fullname', $fullname, PDO::PARAM_STR); 
     $SQL->bindValue(':email', $email, PDO::PARAM_STR); 
     $SQL->execute();  
     $ids = $SQL->fetchAll(PDO::FETCH_ASSOC); 
     $SQL->closeCursor(); 

     foreach ($ids as $id) { 
      return $id['id']; 
     } 

    } else { 
     $pdo = null; 
     return false; 
    } 
} 

所以當insert_test($pdo, $fullname, $email);是內的用於容納數據的每個環被插入在函數如所期望返回每個ID 。

如果任何人都可以看到任何固有的問題,請讓我知道!