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?

blue928
sumber

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.

optimusprime619
sumber
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;
tyler.frankenstein
sumber
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.

disrama
sumber
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.

Valery Lourie
sumber
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();
Kartagis
sumber
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.

Roy Segall
sumber
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.

Rizwan Siddiquee
sumber
-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

GoodSp33d
sumber
1
db_result db_fetch_array dan db_fetch_object adalah untuk Drupal 6 dan sebelumnya.
jenlampton