Bagaimana saya mendapatkan hanya satu hasil menggunakan db_query ()


28

Saya beralih dari metode lama menggunakan PHP 'MySQL' mysql_fetch_array(), dll. Dan saya mencoba untuk menjadi lebih Drupally dengan menggunakan API Database di modul saya.

Saya hanya ingin mengembalikan dan mencetak nilai. Sebagai contoh:

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

Saya tahu nilainya di sana, saya dapat mengakses dan mencetaknya dengan menggunakan metode tradisional di luar API basis data.

print $query->zip tidak bekerja.

Dokumentasi API sejelas lumpur.

Dapatkah seseorang memberi tahu saya cara yang benar untuk mengakses nilai-nilai ini?

Apakah ada tutorial bagus yang bisa direkomendasikan oleh siapa pun?

Jawaban:


38

Jika Anda ingin mengambil hanya satu hasil, Anda bisa menggunakan fetchField dengan db_queryuntuk mengambil hasilnya, misalnya:

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

Anda juga bisa mengambil nilai yang diambil dari sumber hasil yang dikembalikan kueri menggunakan opsi seperti fetchObject () mirip dengan metode mysql_fetch_objectpengkodean PHP ( ) konvensional seperti menggunakan dan mendapatkan hasil.


1
beberapa kritik konstruktif pada downvote akan lebih berguna
— optimusprime619

Tidak ada fungsi atau metode yang Anda jelaskan tersedia di Drupal 7. Contoh Anda akan menghasilkan kesalahan fatal. Juga Anda tampaknya mencampur kode Drupal 6 dan Drupal 7, maka suara turun
— Clive

2
@Clive oops .... aliran darah ... baik untuk mengetahui alasannya..terima kasih!
— optimusprime619

1
Jangan khawatir, jika Anda memperbaiki jawabannya saya dengan senang hati akan menghapus downvote
— Clive

1
@Clive melakukannya sekarang ... :)
— optimusprime619

15

Berikut cara menggunakan API Database di Drupal 7 tanpa menulis kueri MySQL:

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

9

Anda harus mengulang $ query Anda, Anda tidak dapat menganggap Anda hanya memiliki satu hasil dengan permintaan yang diberikan di atas.

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

Jika Anda tahu Anda hanya memiliki satu hasil, Anda dapat memanggil fetchObject pada permintaan Anda ->

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

print $ query-> zip kemudian akan memberikan apa yang Anda inginkan.


4
Catatan: Alih-alih mengubah batas hardcoding, Anda harus menggunakan db_query_range ().
— Berdir

3

Saya akan lakukan

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

jika Anda ingin tepat satu baris dari hasil yang ditetapkan. Kalau tidak, mengulang dengan foreach adalah pilihan terbaik, seperti yang disarankan sebelumnya.


2

Saya tahu ini sudah tua, tetapi Anda dapat dan harus melakukannya:

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

0

Anda harus melakukan cara-cara ini dengan benar di Drupa 7:

  1. db_select - di Drupal ada fungsi yang mengembalikan objek yang Anda buat bersamanya dengan query SQL - https://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_select/7 . Anda memiliki metode pada objek yang disebut rentang. kamu bisa menggunakannya.

  2. Kueri bidang entitas yang merupakan kelas yang menyusun kueri SQL berdasarkan entites: https://www.drupal.org/node/1343708 . Ini juga memiliki metode jangkauan.


0

Drupal 7

Gunakan Pertanyaan Ini Untuk Hasil Tunggal:

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

Alih-alih menggunakan ini

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

karena itu menghasilkan peringatan.


-2

Drupal 6

$query akan menjadi hasil Anda, Anda perlu mengambil nilai dari itu, Dalam kasus Anda Jika hanya mengambil 1 baris dan 1 kolom yaitu zip kemudian untuk mendapatkan langsung

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

$query->ziptidak akan berfungsi karena $ kueri adalah hasil yang disetel bukan objek atau array yang dimuat. Jadi ini harus dilakukan

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

Catatan: db_fetch_arrayadalah API lain untuk mengambil nilai dalam format array


1
db_result db_fetch_array dan db_fetch_object adalah untuk Drupal 6 dan sebelumnya.
— jenlampton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.