Saya telah membubarkan proyek ini karena terlalu banyak pekerjaan, meskipun idenya tampak konyol pada awalnya, namun sebenarnya berhasil sampai saya menemukan banyak masalah dalam melakukan penomoran halaman dan dalam hal kinerja, menurut saya pengelompokan adalah yang terbaik. Gunakan ini dengan risiko Anda sendiri, sungguh menyenangkan membuat proyek ini.
Ini adalah perpustakaan PHP gratis , mudah digunakan , ringan dan kuat yang memungkinkan Anda terhubung ke beberapa database MySQL dengan PDO. Saya telah membuat ini khusus untuk MySQL tetapi saya yakin ini akan bekerja dengan PostgreSQL, MariaDB, CouchDB dll. Ingat, ini untuk database SQL sehingga tidak akan bekerja dengan sistem manajemen database seperti MongoDB dan Apache Cassandra.
✔ Hubungkan ke beberapa database MySQL menggunakan PDO.
✔ Ambil baris dari beberapa database.
✔ Lakukan penyisipan kueri secara efisien dengan hanya melakukan 1 kueri alih-alih menambahkan baris baru di semua tabel di setiap database.
✔ Menyortir, membatasi, dan mengelola hasil/baris dengan mudah.
✔ Skalakan dengan mudah, cukup dengan menambahkan lebih banyak database (tidak perlu menggunakan slave, master, atau cluster).
✔ Hasilkan pengidentifikasi yang benar-benar unik (disebut MDGUID).
➔ PHP 7+ & Apache/Nginx (menggunakan fitur untuk PHP 7 ke atas).
➔ MySQL 5.7+ (untuk memperjelas MySQL 5.7 berfungsi dengan baik, jadi versi apa pun yang lebih tinggi dari MySQL 5.7 akan lebih bagus).
➔ Driver database yang kompatibel dengan PDO (baca selengkapnya di sini).
Anda dapat menggunakan MultiDatabasePDO untuk penggunaan pribadi, pendidikan, dan komersial dengan ketentuan berikut:
➔ Anda tidak menjual, memberikan atau menghosting (salinan asli atau yang telah diedit) perpustakaan ini kepada pengguna lain, Anda harus menautkan mereka ke repositori ini.
➔ Anda tidak mengubah komentar dalam file atau menghapusnya, hal itu akan membuat saya berpikir Anda ingin mengklaimnya sebagai milik Anda.
1. MENGHUBUNGKAN KE DATABASE ANDA!
Sebelum Anda mulai pastikan Anda memahami dasar-dasar PDO. Cukup unduh rilis terbaru dan sertakan file bernama MultiDatabasePDO .php
yang secara otomatis akan menyertakan semua kelas tambahan untuk Anda. Kode pengaturan Anda akan terlihat seperti:
require " ./ MultiDatabasePDO / MultiDatabasePDO .php " ;
$ multiPDO = new WulfGamesYT MultiDatabasePDO MultiDatabasePDO ([
[ " mysql " , " 1.1.1.1 " , " database_1 " , " username " , " password " ],
[ " mysql " , " 2.2.2.2 " , " database_2 " , " username " , " password " ]
]);
Sekarang kita perlu memeriksa kesalahan apa pun menggunakan fungsi sederhana yang disebut hasAnyErrors()
. Anda dapat membuat daftar koneksi yang gagal dengan fungsi getFailedConnections()
.
if ( $ multiPDO -> hasAnyErrors ()) {
error_log ( " Error connecting to database(s): " . $ multiPDO -> getFailedConnections ());
exit ( " Error connecting to our main databases! Please try again later. " );
}
2. MEMBACA WIKI & GUNAKAN PERPUSTAKAAN INI DENGAN CARA YANG BENAR!
Selanjutnya, saya akan merekomendasikan membaca dokumentasi di wiki untuk memahami fungsi masing-masing. Selain itu, penting untuk mengetahui bahwa ada beberapa perbedaan antara perpustakaan ini dan perpustakaan PDO standar, khususnya:
execute()
, gunakan bindValue()
atau bindValues()
.ORDER BY
, LIMIT
atau OFFSET
dalam kueri SQL Anda, silakan lihat panduan ini.AUTO INCREMENT
untuk kolom, sebaliknya jika Anda memiliki kolom ID, gunakan fungsi ini. 3. MENYIAPKAN DATABASE DAN TABEL ANDA!
Jika Anda berencana menggunakan MultiDatabasePDO , Anda harus memastikan semua tabel dari setiap database yang Anda sambungkan terstruktur dengan cara yang sama:
Sebagai contoh, bayangkan kita memiliki 2 tabel berikut dari 2 database berbeda, keduanya terstruktur dan diberi nama yang sama. Setiap contoh dalam README di bawah menggunakan tabel ini. Secara realistis, tabel Anda akan memiliki ribuan, bahkan jutaan baris sebelum Anda perlu mempertimbangkan untuk menggunakan MultiDatabasePDO (atau jika Anda ingin mempersiapkan penskalaan aplikasi web Anda).
Tabel "Pengguna", dari database 1.
tanda pengenal (int) | Nama pengguna (teks) | PassHash (teks) | Email (teks) | Nama Depan (teks) | Nama Belakang (teks) |
---|---|---|---|---|---|
1 | WulfGamesYT | Terima kasih | [email protected] | Liam | Allen |
2 | Indiana Jones55 | npxCn975RSaP | [email protected] | Indiana | Jones |
3 | YaBoiTableFlipper69 | BT7V2U6VJv2d | [email protected] | Steve | Jones |
Tabel "Pengguna", dari database 2.
tanda pengenal (int) | Nama pengguna (teks) | PassHash (teks) | Email (teks) | Nama Depan (teks) | Nama Belakang (teks) |
---|---|---|---|---|---|
4 | Sungguh Bung | 6XBmD4bzGP87 | sungguh [email protected] | Liam | Tukang batu |
5 | NerakaYaBoi | LeyTpTwvvMUM | [email protected] | Juli | Crosby |
Untuk memilih baris dari SEMUA database dan SEMUA tabel, Anda cukup melakukannya, seperti PDO biasa di PHP:
$ selectQuery = $ multiPDO -> prepare ( " SELECT ID, Username, Email FROM Users WHERE Username = :username " );
$ selectQuery -> bindValue ( " :username " , " WulfGamesYT " );
$ selectQuery -> execute ();
while ( $ row = $ selectQuery -> getNextRow ()) { var_dump ( $ row ); }
Katakanlah jika kita memiliki formulir dan Anda dapat POST infonya ke file PHP Anda, dan Anda ingin memasukkan 1 record baru ke dalam tabel dari database bernama "Pengguna", yang perlu Anda lakukan adalah sebagai berikut. Perhatikan bahwa ini akan dimasukkan ke dalam tabel kedua pada contoh tabel di atas karena memiliki jumlah baris terendah. Daripada memasukkan ID manual dan menggunakan tipe data int di tabel Anda, gunakan fungsi generateMDGUID()
di bawah.
$ longSQL = " INSERT INTO Users VALUES (6, :username, :pass, :email, :firstname, :lastname) " ;
$ insertQuery = $ multiPDO -> prepare ( $ longSQL );
$ insertQuery -> bindValues ([
" :username " => $ _POST [ " username " ],
" :pass " => password_hash ( $ _POST [ " password " ], PASSWORD_DEFAULT ),
" :email " => $ _POST [ " email " ],
" :firstname " => $ _POST [ " name-first " ],
" :lastname " => $ _POST [ " name-last " ]
]);
$ insertQuery -> execute ( true , " Users " );
Perhatikan bahwa dengan metode execute()
kita memasukkan 2 parameter, ini diperlukan untuk menyisipkan baris baru, karena ini memberitahu kelas bahwa kita menyisipkan (dengan meneruskan: true) baris baru ke dalam tabel bernama "Pengguna". Jangan masukkan input pengguna yang tidak tepercaya sebagai parameter kedua karena SQL Injection dapat terjadi.
Ini pada dasarnya sama dengan melakukan query SELECT, ini akan memperbarui SEMUA tabel di SEMUA database yang cocok dengan klausa WHERE jika ditentukan, misalnya:
$ updateQuery = $ multiPDO -> prepare ( " UPDATE Users SET Username = :newusername WHERE Username = :oldusername " );
$ updateQuery -> bindValues ([ " :newusername " => " MyFancyUsername " , " :oldusername " => " WulfGamesYT " ]);
$ updateQuery -> execute ();
Sekarang jika kita menjalankan query SELECT pada SEMUA tabel bernama "Pengguna" kita akan melihat baris yang diperbarui.
Sekali lagi, yang perlu kita lakukan adalah:
$ deleteQuery = $ multiPDO -> prepare ( " DELETE FROM Users WHERE Username = :username " );
$ deleteQuery -> bindValue ( " :username " , " MyFancyUsername " );
$ deleteQuery -> execute ();
Sekarang jika kita menjalankan query SELECT pada SEMUA tabel bernama "Pengguna" kita akan melihat baris yang diperbarui.
Penting untuk dicatat bahwa Anda tidak dapat menggunakan ORDER BY
, LIMIT
atau OFFSET
dalam kueri SQL Anda untuk mengurutkan semua baris dari setiap database, hanya baris dalam tabel saat ini dalam 1 database. Sebaliknya Anda harus menggunakan fungsi berikut yang tersedia dengan MultiDatabasePDO yang memudahkan pengorganisasian hasil/baris akhir Anda.
Mengurutkan Hasil (bukan "ORDER BY"): Anda dapat mengurutkan hasil seperti yang Anda bisa dalam kueri SQL dengan "ASC" atau "DESC" diteruskan ke parameter kedua ke metode sortBy()
.
Beginilah cara Anda mengurutkan kolom nomor:
$ selectQuery = $ multiPDO -> prepare ( " SELECT * FROM Users " );
$ selectQuery -> execute ();
//Now sort by the "ID" column in descending order.
$ selectQuery -> sortBy ( " ID " , " DESC " );
while ( $ row = $ selectQuery -> getNextRow ()) { var_dump ( $ row ); }
Ini adalah cara Anda memesan kolom string/objek:
$ selectQuery = $ multiPDO -> prepare ( " SELECT * FROM Users " );
$ selectQuery -> execute ();
//Now sort by the "Username" column in ascending order.
$ selectQuery -> sortBy ( " Username " , " ASC " );
while ( $ row = $ selectQuery -> getNextRow ()) { var_dump ( $ row ); }
Anda dapat memesan beberapa kolom, atau beberapa kali jika Anda mau. Pada contoh di bawah ini kita akan mengurutkan kolom bernama "Nama Depan" dalam urutan menurun, lalu kolom bernama "Nama Belakang". Ini akan mencantumkan pengguna dalam tabel dalam urutan abjad, jika mereka memiliki nama depan yang sama maka itu juga akan mengurutkan berdasarkan nama belakang. Letakkan kolom urutan yang paling tidak penting terlebih dahulu, lalu kolom terpenting di akhir seperti yang Anda lihat pada kode:
$ selectQuery = $ multiPDO -> prepare ( " SELECT * FROM Users " );
$ selectQuery -> execute ();
//Now sort both the columns.
$ selectQuery -> sortBy ( " LastName " , " ASC " );
$ selectQuery -> sortBy ( " FirstName " , " ASC " );
while ( $ row = $ selectQuery -> getNextRow ()) { var_dump ( $ row ); }
Daripada menggunakan AUTO INCREMENT
, atau jika Anda memerlukan cara untuk menghasilkan GUID yang benar-benar unik di beberapa database, Anda dapat menggunakan fungsi kami yang disebut generateMDGUID()
. Di bawah ini adalah panduan tentang cara kerjanya dan bagaimana mereka menjamin keunikan 100%, dan contoh cara menggunakan fungsi tersebut saat menyisipkan baris baru ke dalam tabel Anda.
Cara kerja MDGUID dan menjamin keunikannya:
Contoh:
//Here we generate the MDGUID.
$ mdguid = $ multiPDO -> generateMDGUID ();
$ longSQL = " INSERT INTO Users VALUES (:mdguid, :username, :pass, :email, :firstname, :lastname) " ;
$ insertQuery = $ multiPDO -> prepare ( $ longSQL );
$ insertQuery -> bindValues ([
" :mdguid " => $ mdguid ,
" :username " => $ _POST [ " username " ],
" :pass " => password_hash ( $ _POST [ " password " ], PASSWORD_DEFAULT ),
" :email " => $ _POST [ " email " ],
" :firstname " => $ _POST [ " name-first " ],
" :lastname " => $ _POST [ " name-last " ]
]);
$ insertQuery -> execute ( true , " Users " );
Jika Anda perlu mengajukan pertanyaan, hubungi saya di Twitter.
Twitter: https://www.twitter.com/WulfGamesYT
Jika Anda menyukai perpustakaan ini, mohon pertimbangkan untuk memberi bintang pada perpustakaan ini dan membaginya dengan sesama pengembang yang menyukai PHP & MySQL! Nantikan pembaruannya dan pastikan untuk melaporkan bug apa pun yang Anda temukan kepada saya. Terima kasih telah membaca!