2010-08-05 15 views
5

से सरणी बनाएं मुझे एक छोटी सी समस्या है जिसे मैं समझ नहीं पा रहा हूं। मेरे पास एक डीबी है जिसमें एक मालिक और प्रकार है (और अधिक कोर्स)। मैं मालिक वर्तमान उपयोगकर्ता के बराबर है कि सभी प्रकार के मानों की सूची प्राप्त करना चाहते हैं, लेकिन मैं केवल दो परिणाम प्राप्तmysql क्वेरी php

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' ORDER BY id DESC "; 

$result = mysql_query($sql,$con); 

print_r(mysql_fetch_array($result)); 

प्रिंट आउट:

Array ([0] => 18 [type] => 18) 

और

$sql = "SELECT type FROM cars WHERE owner='".mysql_real_escape_string($_SESSION['username'])."' AND selling='0' "; 

प्रिंट आउट:

Array ([0] => 16 [type] => 16) 

और परिणाम एक सरणी में 1 9, 1 9, 18, 17, 16 जैसा होना चाहिए। वह सभी प्रकार है जो मुझे मालिक के रूप में सेट करते हैं।

मैं इस काम के लिए अब मिल गया है:

for ($x = 0; $x < mysql_num_rows($result); $x++){ 
$row = mysql_fetch_assoc($result); 
echo $row['type']; 
} 

यहाँ मैं सही ढंग से सभी मूल्यों प्रिंट आउट, लेकिन मैं सभी मूल्यों के साथ एक सरणी बनाने के लिए की जरूरत है। हालांकि मैं array_push का उपयोग कर सकता था, लेकिन इसे करने का सबसे बेहतर तरीका है। मैंने सोचा कि मुझे एक साधारण mysql क्वेरी के साथ सभी प्रकार के मान मिलेंगे।

उत्तर

22

अक्सर यह एक while पाश में किया जाता है:

$types = array(); 

while(($row = mysql_fetch_assoc($result))) { 
    $types[] = $row['type']; 
} 

में उदाहरण पर एक नज़र डालें documentation

mysql_fetch_* तरीकों हमेशा अगले परिणाम सेट के तत्व मिल जाएगा:

तार की एक सरणी है कि प्राप्त किए गए पंक्ति से मेल खाती है, या FALSE देता है अगर कोई अधिक पंक्तियाँ हैं।

यही कारण है कि while लूप काम करता है। यदि $row कोई पंक्ति नहीं है तो false और while लूप मौजूद है।

यह केवल कि mysql_fetch_array क्योंकि डिफ़ॉल्ट रूप से यह normal and as associative value के रूप में परिणाम हो जाता है, एक से अधिक पंक्तियां हो जाता है लगता है:

MYSQL_BOTH (डिफ़ॉल्ट) का उपयोग करके आप दोनों साहचर्य और संख्या सूचकांक के साथ एक सरणी मिल जाएगा ।

आपका उदाहरण यह सबसे अच्छा से पता चलता है, तो आप एक ही मूल्य 18 मिलता है और आप $v[0] या $v['type'] के माध्यम से पहुँच सकते हैं।

2

आप के माध्यम से पुनरावृति करने की आवश्यकता है ...

$typeArray = array(); 
$query = "select * from whatever"; 
$result = mysql_query($query); 

if ($result) { 
    while ($record = mysql_fetch_array($results)) $typeArray[] = $record['type']; 
} 
0
$type_array = array();  
while($row = mysql_fetch_assoc($result)) { 
    $type_array[] = $row['type']; 
} 
0
while($row = mysql_fetch_assoc($result)) { 
    echo $row['type']; 
} 
+0

उसका कोड पहले से ही यह कर रहा है। वह चाहता है कि यह एक सरणी बन जाए। इकोइंग इस समस्या को हल करने वाला नहीं है। – Treffynnon

0

आप एक रैपर का उपयोग करके जीवन को आसान बना सकते हैं, उदा।Adodb साथ:

$myarray=$db->GetCol("SELECT type FROM cars ". 
    "WHERE owner=? and selling=0", 
    array($_SESSION['username'])); 

एक अच्छा आवरण सब अपने आप के लिए भागने भी, चीजों को आसान को पढ़ने के लिए कर रही हो जाएगा।

2
THE CORRECT WAY ************************ THE CORRECT WAY 

while($rows[] = mysqli_fetch_assoc($result)); 
array_pop($rows); // pop the last row off, which is an empty row 
+0

हाँ! यह सही तरीका है। –

+0

वह mysqli का उपयोग नहीं कर रहा है वह विरासत mysql – DropHit

+2

विरासत mysql का उपयोग कर रहा है? आपको मिस्क्ल को बहिष्कृत करना होगा। –

0

आप विकिपीडिया पर एसक्यूएल इंजेक्शन आलेख को देखना चाह सकते हैं। अपने SQL आदेशों को करने के लिए एक छोटा फ़ंक्शन खोजने के लिए "हेक्साडेसिमल रूपांतरण" भाग के अंतर्गत देखें और इसमें जानकारी के साथ एक सरणी वापस करें।

https://en.wikipedia.org/wiki/SQL_injection

मैं dosql() फ़ंक्शन लिखा था क्योंकि मैं अपने एसक्यूएल हर जगह को क्रियान्वित करने आदेशों होने के थक गया, त्रुटियों के लिए जाँच करने के लिए भूल जाना और लॉग फाइल करने के लिए अपने आदेशों के सभी प्रवेश करने के लिए सक्षम किया जा रहा यदि आवश्यकता हो तो बाद में देखने के लिए। जो भी उद्देश्य किसी भी उद्देश्य के लिए इसका उपयोग करना चाहता है, वह दिनचर्या मुक्त है। मैंने वास्तव में थोड़ा सा फ़ंक्शन पर विस्तार किया है क्योंकि मैं इसे और अधिक करना चाहता था लेकिन यह मूल कार्य एक SQL कॉल से आउटपुट प्राप्त करने के लिए एक अच्छा प्रारंभिक बिंदु है।

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