2011-05-18 75 views
38

這可能是一個簡單的問題,但我很難理解如何解決它。我有一個表格,允許用戶選擇「定製」或「全部」人員「分配給作業。PDO fetchAll數組到一維

如果選擇自定義,用戶通過單擊每個複選框選擇人員,然後將這些插入到作業表。這將產生以下(3,1,圖10是工作人員的ID)

Array 
(
    [0] => 3 
    [1] => 1 
    [2] => 10 
) 

如果「全體員工」時,予先查詢選擇語句從工作人員表得到的所有員工ID的數組,然後將它們插入作業表中,但是這會產生陣列:

Array 
(
    [0] => Array 
     (
      [staffID] => 1 
      [0] => 1 
     ) 

    [1] => Array 
     (
      [staffID] => 23 
      [0] => 23 
     ) 

    [2] => Array 
     (
      [staffID] => 26 
      [0] => 26 
     ) 

    [3] => Array 
     (
      [staffID] => 29 
      [0] => 29 
     ) 
) 

如何將上面的數組轉換爲所示的第一個數組?

我使用下面的代碼來查詢數據庫以獲取所有員工ID,然後插入它們。

$select = $db->prepare("SELECT staffID FROM staff"); 
    if($select->execute()) 
    { 
     $staff = $select->fetchAll(); 
    } 

    for($i = 0; $i<count($staff); $i++) 
    { 
    $staffStmt = $db->prepare("INSERT INTO staffJobs (jobID, userID) VALUES (:jobID, :staffID)"); 
    $staffStmt->bindParam(':jobID', $jobID, PDO::PARAM_INT); 
    $staffStmt->bindParam(':staffID', $staff[$i], PDO::PARAM_INT); 

    $staffStmt->execute();    

} 

第一個數組插入正常,但最後一個數組插入零的staffID。

有什麼建議嗎?

謝謝=)。

回答

83

查看手冊中的example 2。在你的第一個查詢中,你可以使用:

$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0); 

而你的第二個數組將具有與第一個數組相同的形式。

+2

非常感謝alot =) – Elliott 2011-05-18 16:23:31

+1

謝謝!您的鏈接幫助我找到了如何獲取'staffID'索引數組:'$ select-> fetchAll(PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP)''。非常酷的東西 – Nico 2014-07-16 09:38:51

3

如果print_r($staff[$i])for裏面,你可能會得到

Array 
    (
     [staffID] => 1 
     [0] => 1 
    ) 

這意味着你應該使用$staff[$i]['staffID']代替。


另一種選擇,這應該與你當前的代碼的工作,就是用PDOStatement::fetchColumn()而不是fetchAll()

+0

謝謝,但難道不這樣要求我用兩種不同的方法?如第一個數組不包含「staffID」,是不是可以完全刪除「staffID」並且只是通過編號引用它? – Elliott 2011-05-18 16:17:02

+0

@Elliot:我明白你的意思了,'fetchColumn()'應該在兩種情況下都有效。 – chelmertz 2011-05-18 16:18:19

1

你需要給使用fetchall取回風格

$staff = $select->fetchAll(PDO::FETCH_NUM); 

this link