UPDATE 2:
Jadi, apakah ini yang paling optimal?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
UPDATE 1:
Saya tahu saya bisa menambahkan batas ke kueri sql, tetapi saya juga ingin menyingkirkan perulangan foreach, yang seharusnya tidak saya perlukan.
PERTANYAAN ASLI:
Saya memiliki skrip berikut yang merupakan IMO yang baik untuk mengembalikan banyak baris dari database karena bagian "foreach".
Bagaimana cara mengoptimalkan ini, jika saya tahu saya hanya akan selalu mendapatkan 1 baris dari database. Jika saya tahu saya hanya akan mendapatkan 1 baris dari database, saya tidak mengerti mengapa saya membutuhkan loop foreach, tetapi saya tidak tahu bagaimana mengubah kodenya.
$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;
$STH - $DBH -> prepare
harus ada$STH = $DBH -> prepare
beberapa tempat di halaman ini.Jawaban:
Ambil saja. hanya mendapat satu baris. Jadi tidak diperlukan perulangan foreach: D
contoh (ty northkildonan):
sumber
$dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
fetch(PDO::FETCH_ASSOC)
akan memotong dua array yang dikembalikan jika Anda hanya membutuhkan array nilai kunci.LIMIT 1
setiap saat? Mengetahui bahwa Anda sedang memilihUNIQUE
nilai muncul di benak Anda.Anda dapat menggunakan fetch dan LIMIT secara bersamaan. LIMIT memiliki efek bahwa database hanya mengembalikan satu entri sehingga PHP harus menangani data yang sangat sedikit. Dengan mengambil Anda mendapatkan entri hasil pertama (dan satu-satunya) dari tanggapan database.
Anda dapat melakukan lebih banyak pengoptimalan dengan mengatur jenis pengambilan, lihat http://www.php.net/manual/de/pdostatement.fetch.php . Jika Anda mengaksesnya hanya melalui nama kolom Anda perlu array bernomor.
Perhatikan klausul ORDER. Gunakan ORDER atau WHERE untuk mendapatkan baris yang dibutuhkan. Jika tidak, Anda akan mendapatkan baris pertama di tabel sepanjang waktu.
sumber
Apakah Anda mencoba:
sumber
$row = $DBH->query($query)->fetch()['figure']
. Jikafetch
dikembalikanfalse
karena tidak ada hasil, PHP diam-diam akan mengabaikan referensi kunci yang tidak valid. Jika ada yang salahquery
, tergantung pada bagaimana Anda menyiapkan penanganan kesalahan, itu akan memunculkan Pengecualian (diinginkan, menurut saya) atau Anda akan mendapatkanInvalid object method reference "fetch" on "false"....
kesalahan, bentuk yang akan Anda dapatkan karena pertanyaannya jelas gagal.Jika Anda hanya menginginkan satu bidang, Anda dapat menggunakan fetchColumn daripada mengambil - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
sumber
Anda dapat mencoba ini untuk kueri SELECT database berdasarkan input pengguna menggunakan PDO:
sumber
bagaimana kalau digunakan
limit 0,1
untuk optimasi mysqldan tentang kode Anda:
sumber
Terima kasih atas saran Steven untuk menggunakan fetchColumn, inilah rekomendasi saya untuk mempersingkat satu baris dari kode Anda.
sumber