PHP PDO सिंगल रो लौटाता है


113

अद्यतन 2:

तो क्या यह सबसे अधिक अनुकूलित है जो इसे प्राप्त कर सकता है?

$DBH = new PDO( "connection string goes here" );

$STH = $DBH -> prepare( "select figure from table1" );

$STH -> execute();

$result = $STH -> fetch();

echo $result ["figure"];

$DBH = null;

अद्यतन 1:

मुझे पता है कि मैं sql क्वेरी में सीमा जोड़ सकता हूं, लेकिन मैं फ़ॉरच लूप से भी छुटकारा पाना चाहता हूं, जिसकी मुझे आवश्यकता नहीं है।

मूल प्रश्न:

मेरे पास निम्न स्क्रिप्ट है जो डेटाबेस से कई पंक्तियों को वापस लाने के लिए अच्छा है क्योंकि "फॉर्च्यूनर" अनुभाग है।

मैं इसे कैसे अनुकूलित कर सकता हूं, अगर मुझे पता है कि मुझे हमेशा डेटाबेस से केवल 1 पंक्ति मिलेगी। अगर मुझे पता है कि मुझे डेटाबेस से केवल 1 पंक्ति मिलेगी, तो मैं नहीं देखता कि मुझे फ़ॉरच लूप की आवश्यकता क्यों है, लेकिन मुझे नहीं पता कि कोड कैसे बदलना है।

$DBH = new PDO( "connection string goes here" );

$STH = $DBH -> prepare( "select figure from table1" );

$STH -> execute();

$result = $STH -> fetchAll();

foreach( $result as $row ) {
    echo $row["figure"];
}

$DBH = null;

2
$STH - $DBH -> prepare$STH = $DBH -> prepareइस पृष्ठ पर कई स्थान होने चाहिए ।
रुन

जवाबों:


206

बस ले आओ। केवल एक पंक्ति मिलती है। तो कोई फाड़नेवाला लूप की जरूरत नहीं: डी

$row  = $STH -> fetch();

उदाहरण (ty Northkildonan):

$dbh = new PDO(" --- connection string --- "); 
$stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); 
$stmt->execute(); 
$row = $stmt->fetch();

12
यदि आप अपने तैयार बयान में "लिमिट 1" का उपयोग करते हैं तो सबसे अधिक अनुकूलित।
mjspier

2
शानदार, कृपया पूरा उदाहरण दें। सिर्फ एक पंक्ति नहीं, जिसे ऊपर के उदाहरण में कहीं जाना है।
andrebruton

3
@andrebruton $dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
low_rents

2
fetch(PDO::FETCH_ASSOC)यदि आप केवल कुंजी-मान सरणी की आवश्यकता है, तो लौटे सरणी को आधे में काट देंगे।
rybo111

क्या आपको वास्तव में LIMIT 1हर समय की आवश्यकता है ? यह जानकर कि आप किसी UNIQUEमूल्य का चयन कर रहे हैं, यह ध्यान में आता है।
सुपर कैट

15
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> prepare( "select figure from table1 ORDER BY x LIMIT 1" );

$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];

$DBH = null;

आप एक साथ लाने और लिमिट का उपयोग कर सकते हैं। LIMIT का प्रभाव है कि डेटाबेस केवल एक प्रविष्टि लौटाता है इसलिए PHP को बहुत कम डेटा को संभालना पड़ता है। लाने के साथ आपको डेटाबेस रिपीट से प्रथम (और केवल) परिणाम प्रविष्टि मिलती है।

आप भ्रूण प्रकार सेट करके अधिक अनुकूलन कर सकते हैं, http://www.php.net/manual/de/pdostatement.fetch.php देखें । यदि आप इसे केवल स्तंभ नामों के माध्यम से एक्सेस करते हैं, तो आपको क्रमांकित सरणी की आवश्यकता है।

ORDER क्लॉज से अवगत रहें। आवश्यक पंक्ति प्राप्त करने के लिए ORDER या WHERE का उपयोग करें। अन्यथा आपको समय के अनुसार तालिका में पहली पंक्ति मिल जाएगी।


13

क्या आप ने कोशिश की:

$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;

4
आप वास्तव में और आगे बढ़ सकते हैं $row = $DBH->query($query)->fetch()['figure']। यदि कोई परिणाम नहीं है, तो fetchरिटर्न falseअवैध कुंजी संदर्भ को चुपचाप अनदेखा कर देगा। यदि आपके साथ कुछ गलत हो जाता है query, तो इस बात पर निर्भर करता है कि आपने अपनी त्रुटि को कैसे सेट किया है, यह या तो एक अपवाद (वांछित, मेरी राय में) फेंक देगा या आपको एक Invalid object method reference "fetch" on "false"....त्रुटि मिलेगी , जिसका एक रूप आपने वैसे भी प्राप्त किया होगा क्योंकि क्वेरी स्पष्ट रूप से विफल रही।
kael


8

आप पीडीओ का उपयोग कर उपयोगकर्ता इनपुट के आधार पर डेटाबेस का चयन करें क्वेरी के लिए यह कोशिश कर सकते हैं:

$param = $_GET['username'];

$query=$dbh->prepare("SELECT secret FROM users WHERE username=:param");
$query->bindParam(':param', $param);
$query->execute();

$result = $query -> fetch();

print_r($result);

3
मुझे लगता है कि आप सिर्फ एक बुरा दिन भाई हैं, या उर सिर्फ अपनी प्रोफाइल को देखना चाहते हैं। मेरा उत्तर पीडीओ क्वेरी के साथ चयन फ़ंक्शन के लिए एक चर का उपयोग करके उसी परिदृश्य के साथ पुष्टि करता है। मैं आपके उत्तर के लिए sql इंजेक्शन टिप्पणी को केवल अपना दिन (और मेरा) बनाने के लिए हटा दूंगा।
user3162468

4

कैसे limit 0,1mysql अनुकूलन के लिए उपयोग करने के बारे में

और अपने कोड के बारे में:

$DBH = new PDO( "connection string goes here" );

$STH - $DBH -> prepare( "select figure from table1" );

$STH -> execute();

$result = $STH ->fetch(PDO::FETCH_ASSOC)

echo $result["figure"];

$DBH = null;

3

स्टीवन का उपयोग करने के लिए स्टीवन के सुझाव के लिए धन्यवाद, यहां आपके कोड से छोटी एक पंक्ति को काटने की मेरी सिफारिश है।

$DBH = new PDO( "connection string goes here" );
$STH = $DBH->query( "select figure from table1" );
$result = $STH->fetchColumn();
echo $result;
$DBH = null;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.