পিএইচপি পিডিও একক সারিতে ফিরছে


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:

আমি জানি আমি বর্গ কোয়েরিতে সীমাবদ্ধতা যোগ করতে পারি, তবে আমি পূর্বাঞ্চ লুপ থেকেও মুক্তি পেতে চাই, যা আমার প্রয়োজন হবে না।

মূল প্রশ্ন:

আমার কাছে নিম্নলিখিত স্ক্রিপ্টটি রয়েছে যা "ফরচ" বিভাগের কারণে ডাটাবেস থেকে অনেকগুলি সারি ফিরিয়ে দেওয়ার জন্য ভাল আইএমও।

আমি কীভাবে এটি অপ্টিমাইজ করব, যদি আমি জানি আমি ডেটাবেস থেকে সর্বদা 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();

উদাহরণ (টাই উত্তরকিল্ডোনান):

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

12
আপনি যদি আপনার প্রস্তুত বিবৃতিতে "LIMIT 1" ব্যবহার করেন তবে সর্বাধিক অনুকূলিত।
mjspier

2
চমত্কারভাবে, দয়া করে সম্পূর্ণ উদাহরণ দিন। উপরের উদাহরণে কোথাও যেতে হবে এমন একটি লাইনই নয়।
Andrebruton

3
@ এন্ড্রেব্রটন $dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
নিম্ন_আরেন্টস

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 ব্যবহার করতে পারেন। লিমিটেডের এমন প্রভাব রয়েছে যে ডেটাবেস কেবলমাত্র একটি এন্ট্রি প্রদান করে তাই পিএইচপিকে খুব কম ডেটা হ্যান্ডেল করতে হয়। আনার সাথে সাথে আপনি প্রথম (এবং কেবলমাত্র) ফলাফল এন্ট্রিটি ডাটাবেস পুনঃপ্রবেশন থেকে পাবেন।

আনার প্রকারটি সেট করে আপনি আরও অনুকূল করতে পারেন, দেখুন http://www.php.net/manual/de/pdostatement.fetch.php । যদি আপনি কেবল কলামের নাম দিয়ে এটি অ্যাক্সেস করেন তবে আপনাকে অ্যারে সংখ্যায়িত করতে হবে।

অর্ডার ক্লজ সম্পর্কে সচেতন হন। প্রয়োজনীয় সারিটি পেতে অর্ডার বা 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
আমার মনে হয় আপনি খুব খারাপ দিন কাটাচ্ছেন বা আপনার প্রোফাইলটি সন্ধানের জন্য সন্ধান করছেন। আমার উত্তর পিডিও ক্যোয়ারির সাথে SELECT ফাংশনের জন্য একটি ভেরিয়েবল ব্যবহার করে একই দৃশ্যের সাথে সংশ্লেষ করে। আমি শুধু আপনার দিনটি তৈরি করতে (এবং আমার) আমার উত্তর থেকে স্কেল ইঞ্জেকশন মন্তব্য মুছব।
ব্যবহারকারী3162468

4

কিভাবে ব্যবহার সম্পর্কে limit 0,1মাইএসকিএল অপ্টিমাইজেশনের জন্য করা যায়

এবং আপনার কোড সম্পর্কে:

$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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.