2011-05-18 20 views
38

यह एक साधारण सवाल हो सकता है लेकिन इसे हल करने के तरीके को समझने के लिए संघर्ष कर रहा हूं। मेरे पास एक ऐसा फॉर्म है जो उपयोगकर्ता को नौकरी देने के लिए "कस्टम" या "सभी" कर्मचारी "चुनने की अनुमति देता है।पीडीओ fetch सभी सरणी एक आयामी

यदि कस्टम चुना गया है तो उपयोगकर्ता प्रत्येक चेकबॉक्स पर क्लिक करके कर्मचारियों का चयन करता है, फिर मैं उन्हें नौकरियों में डालता हूं तालिका। यह नीचे (3, 1, 10 कर्मचारियों आईडी हैं)

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

तो "सभी कर्मचारियों" चुना जाता है, मैं पहली बार एक का चयन करें बयान क्वेरी स्टाफ मेज से सभी कर्मचारियों को पहचान पत्र प्राप्त करने के लिए सरणी पैदा करता है, और फिर इन्हें ऊपर की तरह जॉब टेबल में डालें। हालांकि यह सरणी उत्पन्न करता है:

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 
     ) 
) 

मैं उपरोक्त सरणी को ऊपर दिखाए गए सरणी में कैसे परिवर्तित कर सकता हूं?

मैं सभी कर्मचारियों आईडी प्राप्त करने के लिए डेटाबेस से पूछताछ करने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं और फिर उन्हें सम्मिलित कर रहा हूं।

$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();    

} 

पहला सरणी ठीक से सम्मिलित है, हालांकि अंतिम सरणी कर्मचारी आईडी के लिए शून्य डालती है।

कोई सुझाव?

धन्यवाद =)।

उत्तर

83

मैनुअल में example 2 पर एक नज़र डालें। अपना पहला क्वेरी में आप उपयोग कर सकते हैं:

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

और अपने दूसरी सरणी पहली सरणी के रूप में एक ही रूप होगा।

+2

बिल्कुल सही धन्यवाद alot =) – Elliott

+1

धन्यवाद! आपके लिंक ने मुझे 'staffID'-indexed सरणी लाने के तरीके को खोजने में सहायता की: '$ select-> fetchAll (PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP)'। बहुत अच्छी चीजें – Nico

3

आप print_r($staff[$i])for अंदर आप शायद

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

जिसका मतलब है कि आप $staff[$i]['staffID'] बजाय का उपयोग करना चाहिए प्राप्त होगा।


अन्य वैकल्पिक है, जो अपने वर्तमान कोड के साथ काम करना चाहिए, PDOStatement::fetchColumn() बजाय fetchAll() उपयोग करने के लिए है।

+0

धन्यवाद की जरूरत है, लेकिन यह मुझे दो अलग अलग तरीकों का उपयोग करने की आवश्यकता होगा? जैसे कि पहले सरणी में "staffID" नहीं है, क्या "staffID" को पूरी तरह से निकालना संभव नहीं है और केवल इसे संख्या से संदर्भित करना संभव है? – Elliott

+0

@ एलियट: मैं देखता हूं कि अब आपका क्या मतलब है, 'fetchColumn() 'दोनों मामलों में काम करना चाहिए। – chelmertz

1

आप fetchAll लाए जाने शैली

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

देने के लिए से this link

संबंधित मुद्दे