Db_query () ব্যবহার করে আমি কীভাবে কেবল একটি ফলাফল পেতে পারি?


28

আমি 'ওল্ড স্কুল' থেকে পিএইচপি মাইএসকিউএল পদ্ধতি ব্যবহার mysql_fetch_array()ইত্যাদির থেকে রূপান্তর করছি এবং আমি আমার মডিউলগুলিতে ডেটাবেস এপিআই ব্যবহার করে আরও ড্রপলি হওয়ার চেষ্টা করছি।

আমি কেবল ফিরে যেতে এবং একটি মান মুদ্রণ করতে চাই। উদাহরণ স্বরূপ:

$query = db_query("SELECT zip FROM {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city));

আমি মানটি জানি, আমি ডাটাবেস API এর বাইরে outsideতিহ্যবাহী পদ্ধতি ব্যবহার করে এটি অ্যাক্সেস এবং মুদ্রণ করতে পারি।

print $query->zip কাজ করছে না.

এপিআই ডকুমেন্টেশন কাদা হিসাবে পরিষ্কার।

কেউ আমাকে এই মানগুলি অ্যাক্সেস করার সঠিক উপায় বলতে পারেন?

ভাল টিউটোরিয়ালটি কি কেউ সুপারিশ করতে পারে?

উত্তর:


38

আপনি ব্যবহার করতে পারে আপনি যদি শুধুমাত্র একটি ফলাফলের আনতে চান fetchField সঙ্গে db_queryফলাফলের যেমন আনতে:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

আপনি ব্যবহারের মতো প্রচলিত পিএইচপি ( ) কোডিংয়ের পদ্ধতির অনুরূপ ফেচওবজেক্ট () এর মত বিকল্পগুলি ব্যবহার করে ক্যোয়ারীর রিটার্নাল রেজাল্ট সোর্স থেকে প্রাপ্ত মানগুলিওmysql_fetch_object পেতে পারেন।


1
downvote কিছু গঠনমূলক সমালোচনা বরং দরকারী হবে
optimusprime619

আপনি বর্ণিত ফাংশন বা পদ্ধতিগুলির কোনওটিই দ্রুপাল in এ উপলভ্য নয় Your আপনার উদাহরণটি মারাত্মক ত্রুটি তৈরি করবে। এছাড়াও আপনি ড্রুপাল 6 এবং দ্রুপাল 7 কোড মেশাচ্ছেন বলে মনে হয়, তাই ডাউন ভোট
ক্লাইভ

2
@ ক্লাইফ উফ .... রক্তের ভিড় ... কারণটি জানা ভাল তবে ধন্যবাদ .. ধন্যবাদ!
22-22

1
কোনও উদ্বেগ নেই, যদি আপনি উত্তরটি ঠিক করেন তবে আমি আনন্দের সাথে ডাউনভোটটি সরিয়ে দেব
ক্লাইভ

1
@ ক্লাইভ এখনই এটি সম্পন্ন করেছেন ... :)
22-21

15

কোনও মাইএসকিউএল কোয়েরি না লিখে ড্রুপাল the এ ডাটাবেস এপিআই কীভাবে ব্যবহার করবেন তা এখানে:

$query = db_select('zipcodes', 'z')
  ->fields('z', array('zip'))
  ->condition('z.city', $city)
  ->range(0, 1)
  ->execute();
$result = $query->fetchObject();
print $result->zip;

9

আপনাকে আপনার $ কোয়েরিটি লুপ করতে হবে, আপনি ধরে নিতে পারবেন না যে উপরের প্রদত্ত প্রশ্নের সাথে আপনার কেবলমাত্র একটি ফলাফল রয়েছে।

foreach ($query as $row) {
  print $row->zip;
}

আপনি যদি জানেন যে আপনার কেবলমাত্র একটি ফলাফল রয়েছে, তবে আপনি আপনার ক্যোয়ারী -> এ ফেচবজেক্টকে কল করতে পারেন

$query = db_query("select zip from {zipcodes} where city = :city limit 1", array(":city" => $city))->fetchObject();

মুদ্রণ $ ক্যোয়ারী-> জিপ এর পরে আপনাকে যা দিতে হবে তা দেওয়া উচিত।


4
দ্রষ্টব্য: সীমাবদ্ধতার জন্য হার্ডকডিংয়ের পরিবর্তে আপনার db_query_range () ব্যবহার করা উচিত।
বার্দির

3

আমি করবো

$row = (object)db_query('Your SQL here')->fetchAssoc();

আপনি যদি ফলাফল সেট থেকে ঠিক এক সারি চান। অন্যথায় foreach সঙ্গে লুপিং সেরা বিকল্প, হিসাবে পূর্বে প্রস্তাবিত।


2

আমি জানি এটি পুরানো, তবে আপনি করতে এবং করতে পারেন:

$zip_code = db_select('zipcodes', 'z')
    ->fields('z', array(
        'zip'
    ))
    ->condition('city', $city)
    ->range(0, 1)
    ->execute()
    ->fetchField();

0

ভাল আপনি দ্রুপ 7 এ এটি সঠিকভাবে করার উপায় আছে:

  1. db_select - Drupal এ এমন একটি ফাংশন রয়েছে যা আপনি তার সাথে এসকিউএল কোয়েরিটি তৈরি করে এমন একটি বস্তু ফিরিয়ে দেয় - https://api.drupal.org/api/drupal/includes%21database%21datedia.inc/function/db_select/7 । রেঞ্জ নামক অবজেক্টে আপনার একটি পদ্ধতি রয়েছে। তুমি এটা ব্যবহার করতে পারো.

  2. সত্তা ক্ষেত্রের ক্যোয়ারী যা শ্রেণিবদ্ধ যা এনটাইটের উপর একটি এসকিউএল কোয়েরি তৈরি করে: https://www.drupal.org/node/1343708 । এটিতেও পরিসর পদ্ধতি রয়েছে।


0

দ্রুপাল 7

একক ফলাফলের জন্য এই প্রশ্নের ব্যবহার করুন:

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city", array(":city" => $city))->fetchField();

পরিবর্তে এটি ব্যবহার করুন

$zip_code = db_query("SELECT zip from {zipcodes} WHERE city = :city LIMIT 1", array(":city" => $city))->fetchField();

কারণ এটি সতর্কতা উত্পন্ন করে।


-2

দ্রুপাল ঘ

$query আপনার ফলাফলটি হতে হবে আপনাকে এ থেকে মানগুলি আনতে হবে, আপনার ক্ষেত্রে এটি যদি কেবল 1 সারি এবং 1 টি কলাম অর্থাৎ জিপ আনে তবে সরাসরি পেতে

$zip = db_result(db_query("YOUR SQL QUERY"));

$query->zip$ কোয়েরিটি কোনও লোড হওয়া অবজেক্ট বা অ্যারে হিসাবে নয় ফলাফল হিসাবে কাজ করবে না। সুতরাং এটি করা উচিত

while($row = db_fetch_object($res)){
  $row->zip ; // etc
}

দ্রষ্টব্য: অ্যারে ফর্ম্যাটে মান আনার db_fetch_arrayজন্য অন্য একটি এপিআই


1
db_result db_fetch_array এবং db_fetch_object ড্রুপাল 6 এবং এর আগে এর জন্য।
জেনাল্যাম্পটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.