Pdoone. Ini adalah pembungkus sederhana untuk pustaka PDO PHP yang kompatibel dengan SQL Server (2008 R2 atau lebih tinggi), MySQL (5.7 atau lebih tinggi) dan Oracle (12.1 atau lebih tinggi).
Perpustakaan ini mencoba bekerja secepat mungkin . Sebagian besar operasi adalah manajemen string/array sederhana dan bekerja di logam telanjang dari perpustakaan PDO, tetapi juga memungkinkan untuk membuat ORM menggunakan ekstensi EFTEC/PDOOneorm.
Putar ini
$ stmt = $ pdo -> prepare ( " SELECT * FROM myTable WHERE name = ? " );
$ stmt -> bindParam ( 1 , $ _POST [ ' name ' ], PDO :: PARAM_STR );
$ stmt -> execute ();
$ result = $ stmt -> get_result ();
$ products =[];
while ( $ row = $ result -> fetch_assoc ()) {
$ product []= $ row ;
}
$ stmt -> close ();ke dalam ini
$ products = $ pdoOne
-> select ( " * " )
-> from ( " myTable " )
-> where ( " name = ? " ,[ $ _POST [ ' name ' ]])
-> toList ();atau menggunakan ORM (menggunakan perpustakaan EFTEC/PDOOneorm)
ProductRepo // this class was generated with echo $pdoOne()->generateCodeClass(['Product']); or using the cli.
:: where ( " name = ? " ,[ $ _POST [ ' name ' ]])
:: toList ();| ExampleTicketphp | Cupcakes contoh | Contoh pencarian | Contoh metode yang berbeda |
|---|---|---|---|
![]() | ![]() | ![]() |
Lebih banyak contoh:
Contoh mysql php dan pdo menggunakan pdoone
Perpustakaan ini membutuhkan PHP 7.1 dan lebih tinggi, dan membutuhkan PDO ekstensi dan ekstensi PDO-MYSQL (MySQL), PDO-SQLSRV (SQL Server) atau PDO-OCI (Oracle)
Edit composer.json Persyaratan berikutnya, lalu perbarui komposer.
{
"require" : {
"eftec/PdoOne" : " ^4.0.1 "
}
}atau instal melalui CLI menggunakan
Komposer membutuhkan EFTEC/PDOONE
Cukup unduh folder lib dari perpustakaan dan masukkan proyek folder Anda. Maka Anda harus memasukkan semua file yang disertakan di dalamnya.
Buat instance kelas pdoone sebagai berikut. Kemudian, Anda dapat membuka koneksi menggunakan metode connect () atau open ()
use eftec PdoOne ;
// mysql
$ dao = new PdoOne ( " mysql " , " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ conn -> logLevel = 3 ; // it is for debug purpose and it works to find problems.
$ dao -> connect ();
// sql server 10.0.0.1instance or (local)instance or machinenameinstance or machine (default instance)
$ dao = new PdoOne ( " sqlsrv " , " (local)sqlexpress " , " sa " , " abc.123 " , " sakila " , "" );
$ conn -> logLevel = 3 ; // it is for debug purpose and it works to find problems.
$ dao -> connect ();
// test (mockup)
$ dao = new PdoOne ( " test " , " anyy " , " any " , " any " , " any " , "" );
$ dao -> connect ();
// oci (oracle) ez-connect. Remember that you must have installed Oracle Instant client and added to the path.
$ cs = ' (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = instancia1))) ' ;
$ dao = new PdoOne ( " oci " , $ cs , " sa " , " abc.123 " ); // oracle uses the user as the schema
$ conn -> logLevel = 3 ; // it is for debug purpose and it works to find problems.
$ dao -> connect ();
// oci (oracle) tsnnames (the environment variables TNS_ADMIN and PATH must be correctly configured), also tnsnames.ora must exists.
$ cs = ' instancia1 ' ;
$ dao = new PdoOne ( " oci " , $ cs , " sa " , " abc.123 " ); // oracle uses the user as the schema
$ conn -> logLevel = 3 ; // it is for debug purpose and it works to find problems.
$ dao -> connect ();Di mana
$ dao = pdoone baru ("mysql", "127.0.0.1", "root", "abc.123", "sakila", "");
Oracle sulit untuk diinstal. Di Windows, dari folder Bin Oracle Home, Anda harus menyalin semua DLL ke folder PHP dan folder Apache.
Dengan metode runrawquery () , kami dapat menjalankan perintah langsung ke PDO dengan atau tanpa parameter. Dan itu bisa mengembalikan bensa atau array . Ini berguna saat kita menginginkan kecepatan.
Runrawquery ($ rawsql, $ param, $ returnarray, $ fetchmode, $ fetchArgument)
String $ rawsql kueri untuk mengeksekusi array | null $ param [type1, value1, type2, value2] atau [name1 => value, name2 = value2] bool $ returnarray jika true (default) maka ia mengembalikan array. Jika false maka ia mengembalikan PDostatement int $ fetchMode menunjukkan mode untuk mengambil. Contoh: pdo :: fetch_assoc null $ fetchargument argumen fetchmode.
$ sql = ' select * from table where id=1 ' ;
$ pdoStatement = $ pdoOne -> runRawQuery ( $ sql ,[], false ); // [] are the parametersTapi kami bisa mengubahnya untuk mengembalikan array
$ sql = ' select * from table where id=1 ' ;
$ values = $ pdoOne -> runRawQuery ( $ sql ); // [] are the parametersKami juga bisa melewati parameter.
$ values = $ con -> runRawQuery ( ' select * from table where id=? ' ,[ 20 ]); // with parameter
$ values = $ con -> runRawQuery ( ' select * from table where id=:name ' ,[ ' name ' => 20 ]); // with named parameter
$ values = $ con -> runRawQuery ( ' select * from table ' ,[]); // without parameter.Catatan, pustaka ini menggunakan pernyataan yang disiapkan, jadi bebas dari injeksi SQL (jika Anda menggunakan parameter)
$ name = " O'hara " ;
$ values = $ con -> runRawQuery ( " select * from table where name=:name " ,[ ' name ' => $ name ]); // it works.✅
$ values = $ con -> runRawQuery ( " select * from table where name=? " ,[ $ name ]); // it works ok.✅
$ values = $ con -> runRawQuery ( " select * from table where name=' $ name ' " ); // it will crash.Dengan metode runQuery () kami dapat menjalankan pernyataan yang disiapkan di PDO. Ini berguna ketika kita ingin meneruskan argumen untuk itu. RunQuery () membutuhkan PDO PreparedStatement .
Metode ini tidak disarankan kecuali Anda sudah bekerja dengan pernyataan PDO, dan Anda tidak ingin menyesuaikan semua kode Anda.
$ sql = " insert into `product`(name) values(?) " ;
$ stmt = $ pdoOne -> prepare ( $ sql );
$ productName = " Cocacola " ;
$ stmt -> bind_param ( " s " , $ productName ); // s stand for a string. Also i =integer, d = double and b=blob
$ rows = $ pdoOne -> runQuery ( $ stmt );
$ allRows = $ rows -> fetch_all ( PDO :: FETCH_ASSOC );Anda dapat menggunakan pembangun kueri untuk membangun perintah Anda. Anda dapat memeriksa bab tentang Query Builder (DQL) untuk informasi lebih lanjut.
// query builder
$ pdoOne -> set ([ ' name ' => ' cocacola ' ])
-> from ( ' product ' )
-> insert ();Perpustakaan EFTEC PDOOneorm memungkinkan untuk membuat [orm] (#orm) tabel Anda. Jika Anda dihasilkan ORM, maka Anda dapat menggunakan kode berikutnya
ProductRepo:: toList ([ ' category ' => ' drink ' ]);Di mana ProductRepo adalah kelas layanan yang dihasilkan dengan menggunakan ORM.
Secara default, PDOOne menjalankan kueri dalam mode PDO :: fetch_assoc Anda dapat mengubah dengan menjalankan kueri sebagai:
$ pdo -> setFechMode ( PDO :: FETCH_CLASS , ' stdClass ' )-> runRawQuery ( $ query );
// or you can run as
$ pdo -> runRawQuery ( $ query , null , true , false , null , PDO :: FETCH_CLASS , ' stdClass ' )Pdoone memungkinkan 5 jenis tanggal.
Format SQL Ini adalah format bagaimana tanggal disimpan ke dalam database. Itu tergantung pada jenis database. Misalnya MySQL dapat menggunakan format YMD.
Format Manusia Ini adalah format bagaimana pengguna akhir terlihat tanggal kami.
Format Tanggal ISO . Ini adalah format bagaimana nilainya dapat diangkut dan diserialisasi.
Timestamp : itu menghitung jumlah detik setelah 1-1-1970
Kelas Kelas / PHP : Ini adalah objek datetime .
Ada 3 metode untuk menjalankan transaksi:
| Metode | Keterangan |
|---|---|
| startTransaction () | Itu memulai transaksi. Bergantung pada database tipe, itu bisa ditumpuk atau tidak. |
| melakukan() | Melakukan (dan menutup) transaksi |
| rollback () | Rollback (dan menutup) transaksi |
Contoh:
try {
$ sql = " insert into `product`(name) values(?) " ;
$ pdoOne -> startTransaction ();
$ result = $ pdoOne -> runRawQuery ( $ sql ,[ ' Fanta ' => $ productName ], false );
$ pdoOne -> commit (); // transaction ok
} catch ( Exception $ e ) {
$ pdoOne -> rollback ( false ); // error, transaction cancelled, the false means that it doesn't throw an exception if we want rollback.
}Mengembalikan true jika ada tabel (database/skema saat ini)
Mengembalikan statistik (sebagai array) kolom tabel.
$ stats = $ pdoOne -> statValue ( ' actor ' , ' actor_id ' );| Min | Max | rata -rata | jumlah | menghitung |
|---|---|---|---|---|
| 1 | 205 | 103.0000 | 21115 | 205 |
Mengembalikan semua kolom tabel
$ result = $ pdoOne -> columnTable ( ' actor ' );| colname | coltype | Colsize | Colpres | Colscale | ISKEY | IDENDENTITY |
|---|---|---|---|---|---|---|
| Actor_id | Smallint | 5 | 0 | 1 | 1 | |
| first_name | varchar | 45 | 0 | 0 | ||
| last_name | varchar | 45 | 0 | 0 | ||
| last_update | cap waktu | 0 | 0 |
Mengembalikan semua kunci asing dari tabel (Sumber Tabel)
Membuat tabel menggunakan definisi dan kunci utama.
Catatan: Anda dapat menghasilkan kode untuk membuat tabel menggunakan tabel yang ada dengan mengeksekusi CLI (output classcode)
php pdoone.php -database mysql -server 127.0.0.1 -User root -pwd abc.123 -db sakila -input film -Output kode classcode
Contoh: (mysql)
$ pdo -> createTable ( ' film ' ,
[
" film_id " => " smallint unsigned not null auto_increment " ,
" title " => " varchar(255) not null " ,
" description " => " text " ,
" release_year " => " year " ,
" language_id " => " tinyint unsigned not null " ,
" original_language_id " => " tinyint unsigned " ,
" rental_duration " => " tinyint unsigned not null default '3' " ,
" rental_rate " => " decimal(4,2) not null default '4.99' " ,
" length " => " smallint unsigned " ,
" replacement_cost " => " decimal(5,2) not null default '19.99' " ,
" rating " => " enum('G','PG','PG-13','R','NC-17') default 'G' " ,
" special_features " => " set('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') " ,
" last_update " => " timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP "
],[
" film_id " => " PRIMARY KEY " ,
" title " => " KEY " ,
" language_id " => " FOREIGN KEY REFERENCES`language`(`language_id`) ON UPDATE CASCADE " ,
" original_language_id " => " FOREIGN KEY REFERENCES`language`(`language_id`) ON UPDATE CASCADE "
]); $ pdo -> createTable ( ' film ' ,
[
" film_id " => " smallint unsigned not null auto_increment " ,
" title " => " varchar(255) not null " ,
" description " => " text " ,
" release_year " => " year " ,
" language_id " => " tinyint unsigned not null " ,
" original_language_id " => " tinyint unsigned " ,
" rental_duration " => " tinyint unsigned not null default '3' " ,
" rental_rate " => " decimal(4,2) not null default '4.99' " ,
" length " => " smallint unsigned " ,
" replacement_cost " => " decimal(5,2) not null default '19.99' " ,
" rating " => " enum('G','PG','PG-13','R','NC-17') default 'G' " ,
" special_features " => " set('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') " ,
" last_update " => " timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP "
], ' film_id ' ); Contoh (sqlsrv)
$ pdo -> createTable ( ' film ' ,
[
" film_id " => " int NOT NULL IDENTITY(1,1) " ,
" title " => " varchar(255) NOT NULL " ,
" description " => " text(2147483647) DEFAULT (NULL) " ,
" release_year " => " varchar(4) " ,
" language_id " => " tinyint NOT NULL " ,
" original_language_id " => " tinyint DEFAULT (NULL) " ,
" rental_duration " => " tinyint NOT NULL DEFAULT ((3)) " ,
" rental_rate " => " decimal(4,2) NOT NULL DEFAULT ((4.99)) " ,
" length " => " smallint DEFAULT (NULL) " ,
" replacement_cost " => " decimal(5,2) NOT NULL DEFAULT ((19.99)) " ,
" rating " => " varchar(10) DEFAULT ('G') " ,
" special_features " => " varchar(255) DEFAULT (NULL) " ,
" last_update " => " datetime NOT NULL DEFAULT (getdate()) "
],[
" language_id " => " FOREIGN KEY REFERENCES language(language_id) " ,
" original_language_id " => " FOREIGN KEY REFERENCES language(language_id) " ,
" film_id " => " PRIMARY KEY "
]);Ini mengembalikan daftar tabel yang dipesan berdasarkan ketergantungan (dari tidak tergantung hingga lebih tergantung)
Catatan : Operasi ini tidak mudah karena tabel dapat memiliki referensi melingkar.
$ dao = new PdoOne ( ' sqlsrv ' , " (local)sqlexpress " , " sa " , " abc.123 " , " sakila " );
$ dao -> open ();
echo " <pre> " ;
var_dump ( $ dao -> tableSorted ( 3 , false , true )); // it returns the tables sortered
var_dump ( $ dao -> tableSorted ( 3 , true , true )); // it returns all the tables that can't be sortered
echo " </pre> " ;Ini memvalidasi tabel jika tabel cocok dengan definisi yang diserahkan oleh nilai.
$def=[
"film_id" => "int NOT NULL IDENTITY(1,1)",
"title" => "varchar(255) NOT NULL",
"description" => "text(2147483647) DEFAULT (NULL)",
"release_year" => "varchar(4)",
"language_id" => "tinyint NOT NULL",
"original_language_id" => "tinyint DEFAULT (NULL)",
"rental_duration" => "tinyint NOT NULL DEFAULT ((3))",
"rental_rate" => "decimal(4,2) NOT NULL DEFAULT ((4.99))",
"length" => "smallint DEFAULT (NULL)",
"replacement_cost" => "decimal(5,2) NOT NULL DEFAULT ((19.99))",
"rating" => "varchar(10) DEFAULT ('G')",
"special_features" => "varchar(255) DEFAULT (NULL)",
"last_update" => "datetime NOT NULL DEFAULT (getdate())"
];
$keys=[
"language_id" => "FOREIGN KEY REFERENCES language(language_id)",
"original_language_id" => "FOREIGN KEY REFERENCES language(language_id)",
"film_id" => "PRIMARY KEY"
];
var_dump(PdoOne::validateDefTable(self::getPdoOne(),self::TABLE,$def,$keys));
Ini mengembalikan semua kunci asing dari sebuah meja.
$ result = $ pdoOne -> foreignKeyTable ( ' actor ' );| kolokal | tablerem | Colrem |
|---|---|---|
| customer_id | pelanggan | customer_id |
| sewa_id | persewaan | sewa_id |
| Staff_id | staf | Staff_id |
Anda juga dapat membangun kueri prosedural.
Contoh:
$ results = $ pdoOne -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ 1 ])
-> toList (); Menunjukkan kolom untuk kembali. Argumennya adalah perintah SQL, sehingga memungkinkan operasi apa pun yang dukungan database, termasuk fungsi, konstanta, operator, alias, dan semacamnya.
$ results = $ pdoOne -> select ( " col1,col2 " ); //...Menghasilkan Kueri: Pilih Col1, Col2 ....
$ results = $ pdoOne -> select ( " select * from table " ); //->...Menghasilkan kueri: Pilih * dari tabel ....
Menghasilkan kueri yang mengembalikan jumlah nilai. Ini adalah makro dari metode select ()
$ result = $ pdoOne -> count ( ' from table where condition=1 ' ); // select count(*) from table where c..
$ result = $ pdoOne -> count ()-> from ( ' table ' )-> where ( ' condition=? ' ,[ 1 ]); // select count(*) from table where c..
$ result = $ pdoOne -> count ( ' from table ' , ' col1 ' ); // select count(col1) from table
$ result = $ pdoOne -> count ()-> from ( ' table ' ); // select count(*) from tableMenghasilkan kueri yang mengembalikan nilai minimum kolom. Jika $ arg kosong maka ia menggunakan $ SQL untuk nama kolom itu adalah makro dari metode Select ()
$ result = $ pdoOne -> min ( ' from table where condition=1 ' , ' col ' ); // select min(col) from table where c..
$ result = $ pdoOne -> min ( ' from table ' , ' col1 ' ); // select min(col1) from table
$ result = $ pdoOne -> min ( '' , ' col1 ' )-> from ( ' table ' ); // select min(col1) from table
$ result = $ pdoOne -> min ( ' col1 ' )-> from ( ' table ' ); // select min(col1) from tableMenghasilkan kueri yang mengembalikan nilai maksimum kolom. Jika $ arg kosong maka ia menggunakan $ SQL untuk nama kolom itu adalah makro dari metode Select ()
$ result = $ pdoOne -> max ( ' from table where condition=1 ' , ' col ' ); // select max(col) from table where c..
$ result = $ pdoOne -> max ( ' from table ' , ' col1 ' ); // select max(col1) from tableMenghasilkan kueri yang mengembalikan nilai jumlah kolom. Jika $ arg kosong maka ia menggunakan $ SQL untuk nama kolom itu adalah makro dari metode Select ()
$ result = $ pdoOne -> sum ( ' from table where condition=1 ' , ' col ' ); // select sum(col) from table where c..
$ result = $ pdoOne -> sum ( ' from table ' , ' col1 ' ); // select sum(col1) from tableMenghasilkan kueri yang mengembalikan nilai rata -rata kolom. Jika $ arg kosong maka ia menggunakan $ SQL untuk nama kolom itu adalah makro dari metode Select ()
$ result = $ pdoOne -> avg ( ' from table where condition=1 ' , ' col ' ); // select avg(col) from table where c..
$ result = $ pdoOne -> avg ( ' from table ' , ' col1 ' ); // select avg(col1) from tableMenghasilkan perintah pilih.
$ results = $ pdoOne -> select ( " col1,col2 " )-> distinct (); //...Menghasilkan Kueri: Pilih Col1 yang berbeda , Col2 ....
CATATAN: -> DISTING ('Unik') Returns Select Unique ..
Menghasilkan perintah "dari" SQL.
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' ); //...Menghasilkan kueri: Pilih * dari tabel
$ Tabel bisa berupa satu meja atau konstruksi SQL. Untuk Examp, perintah berikutnya valid:
$ results = $ pdoOne -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ); //...Menghasilkan perintah di mana.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ); //...Di mana dapat diekspresikan dengan cara yang berbeda.
Dimungkinkan untuk menulis di mana tanpa parameter sebagai berikut:
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ( " p1=1 and p2>2.5 or p3 like '%aa%' " ); $ aa = ' aa ' ;
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ( " p1=? and p2>? or p3 like ? " ,[ 1
, 2.5
, " % $ aa % " ]);Itu juga berhasil
// (if there is only a single argument without a type)
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ( " p1=? " ,[ 1 ]); // = where("p1=?",[1]);
// (if we don't define to where to put the value)
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ( " p1 " ,[ 1 ]); // = where("p1=?",[1]); Ini adalah definisi steno dari kueri menggunakan array asosiatif, di mana kuncinya adalah nama kolom dan nilainya adalah nilainya untuk membandingkan
Ini hanya berfungsi dengan kesetaraan (=) dan operator logika 'dan' (jenisnya didefinisikan secara otomatis)
// select * from table where p1='1' and p2='2.5' and p3='aa'
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ([ ' p1 ' => 1
, ' p2 ' => 2.5
, ' p3 ' => ' aa ' ]); Juga, dimungkinkan untuk menentukan jenis parameter.
// select * from table where p1=1 and p2='2.5' and p3='aa'
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' )-> where ([ ' p1 ' =>[ 1 ]
, ' p2 ' =>[ 2.5 ]
, ' p3 ' =>[ ' aa ' ]]); Anda juga bisa menggunakan array asosiatif sebagai argumen dan parameter yang disebutkan dalam kueri
$ results = $ pdoOne -> select ( " * " )-> from ( " table " )
-> where ( ' condition=:p1 and condition2=:p2 ' ,[ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();Menghasilkan kueri: Pilih * dari tabel di mana kondisi =? (Coca-cola) dan condition2 =? (1)
Menghasilkan kueri: pilih * dari tabel di mana p1 = 1
Catatan: ArrayParameters adalah array sebagai berikut: Jenis, nilai.
Di mana tipe adalah i = integer, d = double, s = string atau b = blob. Dalam hal keraguan, gunakan "s" (lihat tabel di bawah)
Contoh ArrayParameter:
[1, 'halo', 20.3, 'dunia']
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ 1 ]); //...Menghasilkan kueri: pilih * dari tabel di mana p1 =? (1)
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ 1 , ' hello ' ]); //...Menghasilkan kueri: Pilih * dari tabel di mana p1 =? (1) dan p2 =? ('Halo')
Catatan. di mana bisa bersarang.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ 1 ])
-> where ( ' p2=? ' ,[ ' hello ' ]); //...Menghasilkan kueri: Pilih * dari tabel di mana p1 =? (1) dan p2 =? ('Halo')
Anda juga bisa menggunakan:
$ results = $ pdoOne -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();Menghasilkan kueri: Pilih * dari tabel di mana p1 =? (Coca-cola) dan p2 =? (1)
Menghasilkan perintah pesanan.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ); //...Menghasilkan kueri: Pilih * dari pesanan tabel oleh P1 Desc
Menghasilkan perintah grup.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ); //...Menghasilkan kueri: Pilih * dari grup tabel oleh P1
Menghasilkan perintah yang memiliki.
CATATAN: Ia menggunakan parameter yang sama dengan di mana ()
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( 1 )); //...Menghasilkan kueri: Pilih * dari grup tabel oleh P1 memiliki p1>? (1)
CATATAN: memiliki dapat bersarang memiliki ()-> memiliki ()
CATATAN: Memiliki mungkin tanpa parameter memiliki ('col> 10')
Jalankan kueri menghasilkan.
Catatan Jika ReturnArray benar maka ia mengembalikan array asosiatif. Jika returnarray salah maka ia mengembalikan mysqli_result
Catatan: Ini mengatur ulang parameter saat ini (seperti SELECT CURRENT, dari, di mana, dll.)
Ini adalah makro RUNGEN () . Ini mengembalikan array asosiatif atau false jika operasi gagal.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toList (); Itu mengembalikan pdostatement dari kueri saat ini
Catatan: Jika Anda ingin mengulangi pernyataan, maka Anda dapat menggunakan fetchloop ()
Contoh :
$ stmt = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toPdoStatement ();
while ( $ row = $ stmt -> fetch ()) {
// do something
} Ini mengambil permintaan untuk setiap baris.
Metode ini dapat digunakan ketika kami tidak ingin membaca semua informasi sekaligus, sehingga Anda dapat membaca dan memproses setiap baris secara terpisah
Contoh :
$ this -> select ( ' select id,name from table ' )
-> fetchLoop ( static function ( $ row ) { return ( $ row );}, PDO :: FETCH_ASSOC )Ini mengembalikan metacode (definisi) dari setiap kolom kueri.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toMeta (); atau
$ results = $ pdoOne -> toMeta ( ' select * from table ' ); hasil:
array(3) {
[0]=>
array(7) {
["native_type"]=>
string(4) "LONG"
["pdo_type"]=>
int(2)
["flags"]=>
array(2) {
[0]=>
string(8) "not_null"
[1]=>
string(11) "primary_key"
}
["table"]=>
string(11) "producttype"
["name"]=>
string(13) "idproducttype"
["len"]=>
int(11)
["precision"]=>
int(0)
}
[1]=>
array(7) {
["native_type"]=>
string(10) "VAR_STRING"
["pdo_type"]=>
int(2)
["flags"]=>
array(0) {
}
["table"]=>
string(11) "producttype"
["name"]=>
string(4) "name"
["len"]=>
int(135)
["precision"]=>
int(0)
}
}
Ini makro Rungen. Itu mengembalikan array yang diindeks dari kolom pertama
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toListSimple (); // ['1','2','3','4'] Ini mengembalikan array asosiatif di mana nilai pertama adalah kunci dan yang kedua adalah nilainya.
Jika nilai kedua tidak ada maka ia menggunakan indeks sebagai nilai (nilai pertama).
$ results = $ pdoOne -> select ( " cod,name " )
-> from ( ' table ' )
-> toListKeyValue (); // ['cod1'=>'name1','cod2'=>'name2'] Ini makro Rungen. Ini mengembalikan mysqli_result atau null.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toResult (); // Ini mengembalikan skalar pertama (satu nilai) dari suatu kueri. Jika $ colname nol maka ia menggunakan kolom pertama.
$ count = $ this -> count ( ' from product_category ' )-> firstScalar ();Ini makro Rungen. Ini mengembalikan baris pertama jika ada, jika tidak maka ia mengembalikan false, sebagai array asosiatif.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> first (); Ini makro Rungen. Ini mengembalikan baris terakhir (jika ada, jika tidak, itu mengembalikan false) sebagai array asosiatif.
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> last (); Terkadang lebih efisien untuk menjalankan pesanan () dan pertama () karena terakhir () membaca semua nilai.
Ini mengembalikan perintah dan string SQL.
$ sql = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ pdoOne -> toList (); // executes the queryCatatan: Ini tidak mengatur ulang kueri.
Ada empat cara untuk menjalankan setiap perintah.
Katakanlah kami ingin menambahkan bilangan bulat di kolom col1 dengan nilai 20
Skema dan nilai menggunakan daftar nilai : di mana nilai pertama adalah kolom, yang kedua adalah jenis nilai (i = integer, d = ganda, s = string, b = gumpalan) dan array kedua berisi nilai.
$ pdoOne -> insert ( " table "
,[ ' col1 ' ]
,[ 20 ]);Skema dan nilai dalam daftar yang sama : di mana nilai pertama adalah kolom, yang kedua adalah jenis nilai (i = integer, d = ganda, s = string, b = gumpalan) dan yang ketiga adalah nilainya.
$ pdoOne -> insert ( " table "
,[ ' col1 ' , 20 ]);Skema dan nilai menggunakan dua array asosiatif :
$ pdoOne -> insert ( " table "
,[ ' col1 ' ]
,[ ' col1 ' => 20 ]);Skema dan nilai menggunakan array asosiatif tunggal : Jenisnya dihitung secara otomatis.
$ pdoOne -> insert ( " table "
,[ ' col1 ' => 20 ]);Menghasilkan perintah insert.
$ pdoOne -> insert ( " producttype "
,[ ' idproducttype ' , ' name ' , ' type ' ]
,[ 1 , ' cocacola ' , 1 ]);Menggunakan rantai bersarang (array tunggal)
$ pdoOne -> from ( " producttype " )
-> set ([ ' idproducttype ' , 0 , ' name ' , ' Pepsi ' , ' type ' , 1 ])
-> insert ();Menggunakan rantai bersarang beberapa set
$ pdoOne -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ 101 ])
-> set ( ' name=? ' ,[ ' Pepsi ' ])
-> set ( ' type=? ' ,[ 1 ])
-> insert ();atau (jenisnya didefinisikan, di kemungkinan, secara otomatis oleh mysql)
$ pdoOne -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert (); $ pdoOne -> insertObject ( ' table ' ,[ ' Id ' => 1 , ' Name ' => ' CocaCola ' ]);Menggunakan set deklaratif rantai bersarang
$ pdoOne -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ 100 , ' Pepsi ' , 1 ])
-> insert ();Menghasilkan kueri: Masukkan ke dalam nilai Productype (IdProductType, Name, Type) (?,?,?) ....
Menghasilkan perintah insert.
$ pdoOne -> update ( " producttype "
,[ ' name ' , ' type ' ] //set
,[ 6 , ' Captain-Crunch ' , 2 ] //set
,[ ' idproducttype ' ] // where
,[ 6 ]); // where $ pdoOne -> update ( " producttype "
,[ ' name ' => ' Captain-Crunch ' , ' type ' => 2 ] // set
,[ ' idproducttype ' => 6 ]); // where $ pdoOne -> from ( " producttype " )
-> set ( " name=? " ,[ ' Captain-Crunch ' ]) //set
-> set ( " type=? " ,[ 6 ]) //set
-> where ( ' idproducttype=? ' ,[ 6 ]) // where
-> update (); // updateatau
$ pdoOne -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ 6 ]) // where
-> update (); // updateMenghasilkan kueri: Perbarui
nameSet ProductType =?,type=? di manaidproducttype=? ...
Menghasilkan perintah hapus.
$ pdoOne -> delete ( " producttype "
,[ ' idproducttype ' ] // where
,[ 7 ]); // where $ pdoOne -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // whereMenghasilkan kueri: Hapus dari ProductType di mana
idproducttype=? ...
Anda juga bisa menghapus melalui rantai pembangun DQL.
$ pdoOne -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ 7 ]) // where
-> delete (); $ pdoOne -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete (); Menghasilkan kueri: Hapus dari ProductType di mana
idproducttype=? ...
Dimungkinkan untuk secara opsional menyimpan hasil kueri. Durasi kueri juga didefinisikan dalam kueri. Jika hasil kueri tidak di -cache, maka itu dihitung secara normal (mengeksekusi kueri dalam database). Untuk mengidentifikasi kueri sebagai unik, sistem menghasilkan ID unik (UID) yang berbasis di SHA256 yang dibuat dengan kueri, parameter, metode, dan jenis operasi.
Perpustakaan tidak melakukan operasi cache secara langsung, melainkan memungkinkan untuk menyimpan hasil menggunakan pustaka eksternal.
class CacheService implements eftec IPdoOneCache {
public $ cacheData =[];
public $ cacheCounter = 0 ; // for debug
public function getCache ( $ uid , $ family = '' ) {
if ( isset ( $ this -> cacheData [ $ uid ])) {
$ this -> cacheCounter ++;
echo " using cache n" ;
return $ this -> cacheData [ $ uid ];
}
return false ;
}
public function setCache ( $ uid , $ family = '' , $ data = null , $ ttl = null ) {
$ this -> cacheData [ $ uid ]= $ data ;
}
public function invalidateCache ( $ uid = '' , $ family = '' ) {
unset( $ this -> cacheData [ $ uid ]);
}
}
$ cache = new CacheService ();(2) Menetapkan layanan cache
$ pdoOne = new PdoOne ( " mysql " , " 127.0.0.1 " , " travis " , "" , " travisdb " );
$ cache = new CacheService ();
$ $ pdoOne -> setCacheService ( $ cache );(3) Gunakan cache sebagai berikut, kita harus menambahkan metode usecache () di bagian mana pun dari kueri.
$ pdoOne -> select ( ' select * from table ' )
-> useCache ()-> toList (); // cache that never expires
$ pdoOne -> select ( ' select * from table ' )
-> useCache ( 1000 )-> toList (); // cache that lasts 1000ms. class CacheService implements eftec IPdoOneCache {
public function getCache ( $ uid , $ family = '' ) {
return apcu_fetch ( $ uid );
}
public function setCache ( $ uid , $ family = '' , $ data = null , $ ttl = null ) {
apcu_store ( $ uid , $ data , $ ttl );
}
public function invalidateCache ( $ uid = '' , $ family = '' ) {
// invalidate cache
apcu_delete ( $ uid );
}
}
$ cache = new CacheService ();Urutan adalah alternatif untuk bidang auto_numerik (identitas). Ini memiliki dua metode untuk membuat urutan: kepingan salju dan urutan . Ini adalah alternatif untuk membuat GUID terutama karena mengembalikan angka (Guid biasanya adalah string yang lebih mahal untuk diindeks dan disimpan)
Tujuan dari urutan ini adalah untuk menciptakan angka unik yang tidak pernah diulangi.
$ dao -> nodeId = 1 ; // optional
$ dao -> tableSequence = ' snowflake ' ; // optional
$ dao -> createSequence (); // it creates a table (and it could create a store procedure) called snowflake and a function called next_snowflake(). You could create it only once.Dimungkinkan untuk membuat urutan baru tanpa tabel apa pun. Ini cepat, tetapi bisa memiliki masalah tabrakan.
Ini memastikan angka bebas tabrakan hanya jika kita tidak melakukan lebih dari satu operasi per 0,0001 detik namun, itu juga menambahkan angka acak semu (0-4095 berbasis waktu) sehingga peluang tabrakan adalah 1/4095 (per dua operasi dilakukan setiap 0,0001 detik). Ini didasarkan pada nomor kepingan salju Twitter. yaitu. Anda aman untuk tabrakan jika Anda melakukan kurang dari 1 juta operasi per detik (secara teknis: 45 juta).
$ pdo-> getSequencePhp ([tidak dapat diprediksi = false]) mengembalikan urutan tanpa menggunakan tabel. Urutan ini lebih efisien dari $ dao-> getSequence, tetapi menggunakan nilai acak untuk menangani tabrakan.
Jika upredictable benar maka ia mengembalikan angka yang tidak dapat diprediksi (itu membalik beberapa digit)
$ pdo -> getSequencePHP () // string(19) "3639032938181434317" $ dao -> getSequencePHP ( true ) // string(19) "1739032938181434311" $ pdo ->getSequence() // string(19) "3639032938181434317"
$ pdo -> getSequencePHP () // string(19) "3639032938181434317" $ pdo -> getSequence ( true ) // returns a sequence by flipping some values.
$ pdo -> getSequencePHP ( true ) // string(19) "1739032938181434311" | Bidang | Keterangan | Contoh |
|---|---|---|
| $ prefixbase | Jika kita perlu menambahkan awalan ke setiap tabel | $ this-> prefixbase = 'example_'; |
| $ internalcachecounter | Penghitung hit cache internal. | $ this-> internalCachecounter =; |
| $ nodeid | Digunakan oleh urutan (Snowflake). nodeid Ini adalah pengidentifikasi node. Itu harus antara 0..1023 | $ this-> nodeid = 3; |
| $ tableSquence | Nama urutan tabel (Snowflake) | $ this-> tableSquence = "tableSeQ1"; |
| $ masker0 | Jika kita ingin menghasilkan angka yang tidak dapat diprediksi (digunakan berdasarkan urutan) | $ this-> masks0 = [0,1,2,3,4]; |
| $ masker1 | Jika kita ingin menghasilkan angka yang tidak dapat diprediksi (digunakan berdasarkan urutan) | $ this-> masks1 = [4,3,2,1,0]; |
| $ databaseType | Jenis database saat ini. Itu diatur melalui konstruktor el | echo $ this-> databaseType; |
| $ server | Mesin server saat ini | echo $ this-> server; |
| $ pengguna | Pengguna saat ini | echo $ this-> pengguna; |
| $ pwd | Kata sandi saat ini | echo $ this-> pwd; |
| $ db | Database atau skema saat ini (Oracle mengabaikan nilai ini) | echo $ this-> db; |
| $ charset | Untuk mengatur charset default. Itu harus diatur melalui konstruktor | echo $ this-> charset; |
| $ isopen | Memang benar jika database terhubung sebaliknya, itu salah | if ($ this-> isopen) {...}; |
| $ ThrowonError | Jika benar (default), maka ia melakukan kesalahan jika terjadi kesalahan. Jika salah, maka eksekusi berlanjut | $ this-> throwonError = false; |
| $ conn1 | Contoh PDO. Anda dapat mengaturnya atau menggunakannya secara langsung. | $ this-> conn1-> Pdostatement (..); |
| $ transactionopen | Benar jika transaksi terbuka | if ($ this-> transactionopen) {...}; |
| $ readonly | Jika database berada dalam mode baca saja atau tidak. Jika benar maka kita harus menghindari untuk menulis di database | $ this-> readonly = true; |
| $ logfile | Nama file lengkap dari file log. Jika kosong maka tidak menyimpan file log. File log dibatasi hingga 1MB | $ this-> logFile = "/folder/file.log"; |
| $ errortext | Itu menyimpan kesalahan terakhir. RUNGET DAN AGTRTY mengatur ulangnya | echo $ this-> errortext; |
| $ isthrow | todo | $ this-> isthrow =; |
| $ Loglevel | Ini menunjukkan tingkat log saat ini. 0 = tidak ada log (untuk produksi), 3 = log penuh | $ this-> loglevel = 3; |
| $ LastQuery | Kueri terakhir dieksekusi | echo $ this-> lastquery; |
| $ lastparam | Parameter terakhir. Itu adalah array asosiatif | echo $ this-> lastParam; |
Perpustakaan ini memungkinkan enkripsi/dekripsi informasi.
Untuk mengatur enkripsi, Anda dapat menggunakan perintah berikutnya:
$ this -> setEncryption ( 12345678 , '' , ' INTEGER ' ); // the type of encryption is integer and it only works with integers. It doesn't use a salt value
$ this -> setEncryption ( ' password ' , ' some-salt ' , ' AES-256-CTR ' ); // the password, the salt and the type of encryption (aes-256-ctr), you can use other methods
$ this -> setEncryption ( ' passwrd ' , '' , ' SIMPLE ' ); // the type of encryption is simple and it only works with primitive values. It doesn't use a salt.Maka Anda dapat mengenkripsi dan mendekripsi nilai menggunakan
$ encrypted = $ this -> encrypt ( $ original ); // encrypt $original
$ original = $ this -> decrypt ( $ encrypted ); // decrypt $encryptedContoh:
$ this -> setEncryption ( ' 12345 ' , ' salt-1234 ' ); // it will use AES-256-CTR, the password and the salt must be secret.
// create user
$ this -> set ([ ' username ' => 1 , ' password ' => $ this -> encrypt ( $ password )])
-> from ( ' user ' )
-> insert ();
// validate user
$ user = $ this -> select ([ ' username ' , ' password ' ])
-> from ( ' user ' )
-> where ([ ' username ' , ' password ' ],[ 1 , $ this -> encrypt ( $ password )])
-> first ();
// $user= if false or null then the user does not exist or the password is incorrect. Anda dapat mengatur level log ke 3. Level log berfungsi ketika operasi gagal, semakin tinggi level log, maka itu menunjukkan sebagian besar informasi.
$ pdoOne -> logLevel = 3 ; // the highest for debug.Secara default, Pdoone melempar kesalahan PHP, tetapi kami dapat menghindarinya dengan mengatur bidang $ ThrowonError ke False.
$ pdoOne -> throwOnError = false ; // it could be used in production. var_dump ( $ pdoOne -> lastQuery ); // it shows the last query
var_dump ( $ pdoOne -> lastParam ); // and it shows the last parameters.Jika kosong maka itu tidak akan menghasilkan file log (menggunakan file log php)
$ pdoOne -> logFile = true ; Pdoone memiliki beberapa fitur yang hanya tersedia di CLI.

Jalankan baris berikutnya (di folder lib)
PHP Pdoonecli.php
(atau menunjuk ke folder kanan)
PHP/VAR/WEB/VENDOR/EFTEC/LIB/PDOONECLI
Anda dapat menggunakan bendera "-i" untuk masuk dalam mode interaktif.
Anda dapat menggunakan tombol Tab untuk nilai AutoComplete (jika ada).

Catatan: Anda juga dapat menyimpan dan memuat konfigurasi.
Terhubung ke mysql dan menghasilkan CSV dari tabel "aktor"
# # via arguments
php pdoonecli --databasetype mysql --server 127.0.0.1 -u root -p abc.123 --database sakila -in actor -out csv
# # via user input (interactive)
php pdoonecli -i -in actor -out csvSimpan konfigurasi dalam file
php pdoonecli --databasetype mysql --server 127.0.0.1 -u root -p abc.123 --database sakila --saveconfig myconfigMuat konfigurasi dari file
php pdoonecli --loadconfig myconfig -in actor -out csvAnda bisa menggunakan bendera "-cli" untuk menghasilkan kelas repositori

CLI bersifat interaktif, dan memungkinkan untuk memuat dan menyimpan konfigurasi.
Fungsionalitas ini akan menghasilkan kelas repositori yang siap digunakan.
Katakanlah contoh berikutnya
mysql:
php pdoone.php --Catabase mysql --sver 127.0.0.1:3306 --user root -p abc.123 -db sakila -input "aktor" -kode classcode output
SQLSRV:
php pdoone.php --Catabase sqlsrv --sver pcjc sqlexpress --user sa -p abc.123 -db sakila -input "aktor" -kode classcode output
Ini akan terhubung ke database MySQL, IP: 127.0.0.1 dan database Sakila, dan itu akan membaca tabel "Aktor".
Itu akan mengembalikan hasil berikutnya
/**
* Generated by PdoOne Version 1.28
* Class ActorRepo
*/
class ActorRepo
{
const TABLE = ' Actor ' ;
const PK = ' actor_id ' ;
/** @var PdoOne */
public static $ pdoOne = null ;
/**
* It creates a new table<br>
* If the table exists then the operation is ignored (and it returns false)
*
* @param array $definition
* @param null $extra
*
* @return array|bool|PDOStatement
* @throws Exception
*/
public static function createTable ( $ definition , $ extra = null ) {
if (! self :: getPdoOne ()-> tableExist ( self :: TABLE )) {
return self :: getPdoOne ()-> createTable ( self :: TABLE , $ definition , self :: PK , $ extra );
}
return false ; // table already exist
}
// .....
}Fungsionalitas ini akan menghasilkan kelas repositori baru dengan operasi yang paling umum: masukkan, daftar, perbarui, hapus, dapatkan, hitung, buat tabel, tabel drop dan tabel pemotong
Mengapa kita perlu menghasilkan kelas? (Alih -alih mewarisi satu) Kelas CRUD ini hanyalah titik awal. Pengembang dapat memodifikasi kode, menambahkan metode baru, memodifikasi metode sebelumnya dan sebagainya.
Untuk menggunakan kelas, kita bisa menulis kode berikutnya:
// 1) option 1, inject an instance of $pdo
ActorRepo:: setPdoOne ( $ pdoOne ); // it inject the current connect to the database
// 2) option 2.
// If the global variable $pdoOne exists, then it is injected. (unless it is defined by using setPdoOne()
$ pdoOne = new PdoOne ( " mysql " , " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ pdoOne -> connect ();
// 3) option 3
// If the global function pdoOne() exists, then it is used for obtain the instance.
function pdoOne () {
global $ pdo ;
if ( $ pdo === null ) {
$ pdo = new PdoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
}
return $ pdo ;
}
$ actorActorRepo :: get ( 2 ); // it will read the actor with the pk=2 and it will return as an array.
$ actors = $ actorArray =ActorRepo:: select (); // it returns all the rows.Atau, Anda dapat menghasilkan file PHP secara otomatis sebagai berikut:
php pdoone.php -database mysql -server 127.0.0.1:3306 -User root -pwd abc.123 -db sakila -input "aktor" -Output kode classcode> actorrepo.php
Catatan: Kode kurang dari php-tag, namespace dan penggunaan tetapi yang lainnya ada di sini.
Ini akan mengambil kueri dan akan mengembalikan kode PHP dengan kueri diformat.
Contoh:
php pdoone.php -database mysql -server 127.0.0.1:3306 -User root -pwd ABC.123 -db sakila -input "pilih * dari aktor" -output SelectCode
Ini akan menghasilkan kode berikutnya:
/** @var array $result=array(["actor_id"=>0,"first_name"=>'',"last_name"=>'',"last_update"=>'']) */
$ result = $ pdo
-> select ( " * " )
-> from ( " actor " )
-> toList ();Ini akan menghasilkan array asosiatif (dengan nilai default) yang didasarkan pada kueri atau tabel yang dipilih.
php pdoone.php -database mysql -server 127.0.0.1:3306 -User root -pwd abc.123 -db sakila -input "pilih * dari aktor" -output arraycode
Itu akan kembali:
// ["actor_id"=>0,"first_name"=>'',"last_name"=>'',"last_update"=>'']Itu akan mengembalikan hasil kueri sebagai json
php pdoone.php -database mysql -server 127.0.0.1:3306 -User root -pwd abc.123 -db sakila -input "pilih * dari aktor" -output json
Itu akan kembali:
[{ "actor_id" : " 1 " , "first_name" : " PENELOPE " , "last_name" : " GUINESS " , "last_update" : " 2006-02-15 01:34:33 " }
,{ "actor_id" : " 2 " , "first_name" : " NICK " , "last_name" : " WAHLBERG " , "last_update" : " 2006-02-15 01:34:33 " }
,{ "actor_id" : " 3 " , "first_name" : " ED " , "last_name" : " CHASE " , "last_update" : " 2006-02-15 01:34:33 " }
,{ "actor_id" : " 4 " , "first_name" : " JENNIFER " , "last_name" : " DAVIS " , " last_update " }]Itu akan mengembalikan hasil kueri sebagai json
php pdoone.php -database mysql -server 127.0.0.1:3306 -User root -pwd abc.123 -db sakila -input "pilih * dari aktor" -output csv
Itu akan kembali:
actor_id,first_name,last_name,last_update
1,"PENELOPE","GUINESS","2006-02-15 01:34:33"
2,"NICK","WAHLBERG","2006-02-15 01:34:33"
3,"ED","CHASE","2006-02-15 01:34:33"
4,"JENNIFER","DAVIS","2006-02-15 01:34:33"
Atau untuk CLI, perpustakaan memiliki visual antarmuka. Itu melakukan semua operasi CLI.

Cukup panggil metode render ()
<?php
use eftec PdoOne ;
use mapache_commons Collection ;
include " ../vendor/autoload.php " ;
$ dao = new PdoOne ( " test " , " 127.0.0.1 " , " dummy " , " dummy " , " dummy " ); // we need any connection.
$ dao -> logLevel = 3 ;
$ dao -> render ();Ada contoh dalam contoh folder/testui.php
Perintah berikutnya biasanya dieksekusi sendiri (bukan dalam rantai metode)
| Metode | Keterangan | Contoh |
|---|---|---|
| createTable () | Membuat tabel dan indeks menggunakan definisi di dalam repo | TablaparentRepo :: createtable (); |
| createForegnkeys () | Buat semua tombol asing dari tabel | TablaparentRepo :: createForeignKeys (); |
| droptable () | Jatuhkan meja | TablaparentRepo :: droptable (); |
| memotong() | Potong meja | TablaparentRepo :: truncate (); |
| validtable () | Validasi jika tabel tidak berubah | $ ok = TablaparentRepo :: validtable (); |
TablaParentRepo:: createTable ();
TablaParentRepo:: createForeignKeys ();
TablaParentRepo:: dropTable ();
TablaParentRepo:: truncate ();
// We don't have a method to alter a table.
$ ok =TablaParentRepo:: validTable (); // it returns true if the table matches with the definition stored into the clasOperator bersarang adalah metode yang harus di antara rantai metode kami.
ClassRepo :: op () :: where () :: finalop () adalah ✅
ClassRepo :: op () :: op () :: where () akan membiarkan rantai terbuka
Misalnya:
// select *
// from table
// inner join table2 on t1=t2
// where col=:arg
// and col2=:arg2
// group by col
// having col3=:arg3
// order by col
// limit 20,30
$ results = $ pdo -> select ( ' * ' )
-> from ( ' table ' )
-> innerjoin ( ' table2 on t1=t2 ' )
-> where ( ' col=:arg and col2:=arg2 ' ,[ 20 , 30 ])
// it also works with ->where('col=:arg',20)->where('col2'=>30)
// it also works with ->where('col=?',20)->where('col2=?'=>30)
-> group ( ' col ' )
-> having ( ' col3=:arg3 ' , 400 )
-> order ( ' col ' )
-> limit ( ' 20,30 ' )
-> toList (); // end of the chain| Metode | Keterangan | Contoh |
|---|---|---|
| Di mana() | Itu menambahkan tempat ke rantai | TablaparentRepo :: where () |
| memesan() | Itu menambahkan pesanan ke rantai | TablaparentRepo :: order () |
| kelompok() | itu menambahkan grup ke rantai | TablaparentRepo :: Group () |
| membatasi() | Itu membatasi hasilnya | TablaparentRepo :: Limit () |
| halaman() | Mirip dengan batas tetapi menggunakan halaman | TablaparentRepo :: page () |
| Innerboin () | Itu menambahkan gabungan batin ke dalam kueri | TablaparentRepo :: InnerJoin () |
| kiri() | Itu menambahkan gabungan kiri ke kueri | TablaparentRepo :: Left () |
| Kanan() | Itu menambah gabungan yang tepat ke kueri | TablaparentRepo :: right () |
Kami memiliki metode yang berbeda untuk menghasilkan perintah DQL (Query) dalam database kami.
Jika operasi gagal, mereka mengembalikan palsu, dan mereka dapat memicu pengecualian.
Metode selanjutnya harus di ujung rantai. Contoh:
ClassRepo :: op () :: op () :: tolist () adalah ✅
ClassRepo :: op () :: tolist () :: op () akan memicu pengecualian
| Memerintah | Keterangan | Contoh |
|---|---|---|
| tolist () | Mengembalikan serangkaian elemen | $ data = tableNeMerepo :: tolist (); // Pilih * dari TableRepo $ data = tableNeMerepo :: di mana ('a1 =?', [$ value]) :: tolist (); // Pilih * dari TableRepo Where A1 = $ Value |
| Pertama() | Mengembalikan barisan sederhana | $ data = tableNeMerepo :: first ($ pk); // Pilih * dari TableRepo di mana PK = $ PK (selalu mengembalikan nilai 1 atau nol) $ data = tableNeMerepo :: di mana ('a1 =?', [$ value]) :: first (); // Mengembalikan nilai pertama (atau salah jika tidak ditemukan) |
| ada() | Mengembalikan true jika ada kunci utama | $ data = tableNeMerepo :: ada ($ pk); // Mengembalikan true jika objek ada. |
| menghitung() | Mengembalikan jumlah baris dalam kueri | $ data = tableNeMerepo :: count ($ conditions); $ data = tableNeMerepo :: di mana ('a1 =?', [$ value]) :: count (); |
Metode selanjutnya memungkinkan memasukkan, memperbarui atau menghapus nilai dalam database.
| Metode | Keterangan | Contoh |
|---|---|---|
| menyisipkan | Ini memasukkan nilai ke dalam database. Itu bisa mengembalikan identitas | $ identity = TablaparentRepo :: INSERT ($ OBJ); |
| memperbarui | Ini memperbarui nilai ke dalam database. | TablaparentRepo :: UPDATE ($ OBJ); |
| menghapus | Itu menghapus nilai dari database. | TablaparentRepo :: Delete ($ obj); |
| deletebyid | Ini menghapus nilai (menggunakan kunci utama sebagai kondisi) dari database. | TablaparentRepo :: deletebyId ($ pk); |
// where obj is an associative array or an object, where the keys are the name of the columns (case sensitive)
$ identity =TablaParentRepo:: insert ( $ obj );
TablaParentRepo:: update ( $ obj );
TablaParentRepo:: delete ( $ obj );
TablaParentRepo:: deleteById (id);Dimungkinkan untuk memvalidasi model. Model divalidasi menggunakan informasi database, menggunakan jenis kolom, panjangnya, jika nilainya memungkinkan nol dan jika identitas (auto numerik).
$ obj =[ ' IdUser ' => 1 , ' Name ' ='John Doe'];
UserRepo:: validateModel ( $ obj , false ,[ ' _messages ' ]); // returns true if $obj is a valid User.Array rekursif adalah array string dengan nilai -nilai yang dapat dibaca atau diperoleh atau dibandingkan. Misalnya, untuk bergabung dengan tabel secara kondisional. PdoOne tidak menggunakannya secara langsung tetapi _basepdoonerepo menggunakannya (_basepdoonerepo adalah kelas yang digunakan ketika kami menghasilkan kelas layanan repositori secara otomatis).
Contoh
$ this -> select ( ' * ' )-> from ( ' table ' )-> recursive ([ ' table1 ' , ' table1.table2 ' ]);
// some operations that involves recursive
if ( $ this -> hasRecursive ( ' table1 ' )) {
$ this -> innerJoin ( ' table1 on table.c=table1.c ' );
}
if ( $ this -> hasRecursive ( ' table1.table2 ' )) {
$ this -> innerJoin ( ' table1 on table1.c=table2.c ' );
}
$ r = $ this -> toList (); // recursive is resetted. Itu menetapkan array rekursif.
Nilai ini diatur ulang setiap kali metode rantai berakhir.
Itu mendapatkan array rekursif.
Itu kembali benar jika rekursif memiliki beberapa jarum.
Jika $ this-> Recursive adalah ['*'] maka itu selalu kembali benar.
$ this -> select ( ' * ' )-> from ( ' table ' )-> recursive ([ ' * ' ]);
$ this -> hasRecursive ( ' anything ' ); // it always returns true. | Perpustakaan | Menyisipkan | findpk | hidrat | dengan | waktu |
|---|---|---|---|---|---|
| Pdo | 671 | 60 | 278 | 887 | 3,74 |
| Pdoone | 774 | 63 | 292 | 903 | 4,73 |
| Kurang | 1413 | 133 | 539 | 825 | 5.984 |
| Yiim | 2260 | 127 | 446 | 1516 | 8.415 |
| Yiimwithcache | 1925 | 122 | 421 | 1547 | 7.854 |
| Yii2m | 4344 | 208 | 632 | 1165 | 11.968 |
| Yii2marrayhydrate | 4114 | 213 | 531 | 1073 | 11,22 |
| Yii2mscalarhydrate | 4150 | 198 | 421 | 516 | 9.537 |
| Propel20 | 2507 | 123 | 1373 | 1960 | 11.781 |
| Propel20withcache | 1519 | 68 | 1045 | 1454 | 8.228 |
| Propel20formatondemand | 1501 | 72 | 994 | 1423 | 8.228 |
| Doktrinem | 2119 | 250 | 1592 | 1258 | 18.139 |
| Doctrinemwithcache | 2084 | 243 | 1634 | 1155 | 17.952 |
| Doctrinemarrayhydrate | 2137 | 240 | 1230 | 877 | 16,83 |
| Doctrinemscalarhydrate | 2084 | 392 | 1542 | 939 | 18.887 |
| Doctrinemwithoutproxies | 2119 | 252 | 1432 | 1960 | 19.822 |
| Fasih | 3691 | 228 | 708 | 1413 | 12.155 |
Pdoone menambahkan sedikit Ovehead di atas PDO, namun itu adalah pembungkus sederhana untuk PDO.
Ini berarti Anda diperbarui pdoone, dan Anda menggunakan satu kelas yang dihasilkan oleh ORM. Kelas ini harus dihasilkan kembali.
Pendeknya:
Setiap versi utama berarti dapat memecahkan kode lama. Yaitu 1.0 -> 2.0
Setiap versi minor berarti menambahkan fungsionalitas baru yaitu 1.5 -> 1.6 (metode baru)
Setiap versi desimal berarti ia menambal/memperbaiki/refactoring fungsionalitas sebelumnya yaitu 1.5.0 -> 1.5.1 (fix)
4.10 2024-09-06
4.9.2 2024-08-20
4.9.1 2024-08-20
4.9 2024-08-02
4.8 2024-07-06
4.7.1 2024-06-07
4.7 2024-06-07
4.6.2 2024-03-02
4.6.1 2024-03-02
4.6 2024-03-02
4.4 2023-12-12
4.3.3 2023-09-05
4.3.2 2023-09-05
4.3.1 2023-09-02
4.3 2023-07-01
4.2 2023-04-07
4.1.2 2023-03-21
4.1.1 2023-03-21
4.1 2023-03-20
4.0.1 2023-03-11
4.00 2023-11-03
3.16 2023-12-02
3.15 2023-02-03
3.14 2023-01-30
3.13 2023-01-26
3.12.2 2022-09-03
3.12.1 2022-08-26
3.12 2022-08-14
3.11.1 2022-07-30
3.11 2022-07-30
3.10 2022-07-30
3.9 2022-07-23
3.8.1 2022-07-23
3.8 2022-07-22
3.7 2022-07-16
3.6 2022-07-07
3.5 2022-07-06
3.3 2022-06-27
3.2 2022-06-27
3.1.6 2022-06-24
3.1.5 2022-06-23
3.1.4 2022-06-21
3.1.3 2022-06-18
3.1.2 2022-06-18
3.1.1 2022-06-17
3.1 2022-06-11
3.0 2022-06-1
2.32 2022-03-20
2.31 2022-03-04
2.30 2022-02-28
2.29 2022-02-20
2.27 2022-02-19
2.26 2022-02-19
2.25 2022-02-01
2.24.1 2022-02-06
2.24 2022-02-06
2.23 2022-02-04
2.22.2 2022-02-01
2.22.1 2022-01-03
2.22 2022-01-30
2.21 2022-01-28
However, it is far from perfect.
2.20 2022-01-04
2.19
2.18
2.16
2.15 2021-07-24
2.14.3 2021-06-15
2.14.2 2021-06-13
2.14.1 2021-06-09
2.14 2021-06-04
_BasePdoOneRepo now works more closely with the class PdoOneQuery , so each query is a different instance.
[fix] PdoOne dateConvertInput() does not crash when the value is not a date.
[fix] PdoOne throwError() does not stack errors but still triggers the last error (if any).
[changes] ❗ PdoOne aggregate functions (sum,min,max,avg) now returns a value instead of generating a query.
$result=$pdo->sum('xxx')->firstScalar(); // before $result=$pdo->sum('xxx'); // Sekarang
[fix] PdoOne generateCodeArray() used for the generation of classes, returns the correct name when it is set.
[changes] _BasePdoOneRepo : reset(),getQuery(),dropTable(),useCache(),limit(),newQuery(),order(),innerjoin(),left() ,right()
[changes] PdoOneQuery : Multiples changes.
2.13.1 2021-05-22
2.13 2021-04-17
2.12 2021-04-17
2.11.1 2021-04-17
2.11 2021-04-17
2.10.3 2021-04-14
2.10.2 2021-04-06
2.10.1 2021-04-05
2.10 2021-04-04
2.9.4 2021-03-22
2.9.3 2021-02-22
2.9.2 2021-02-18
2.9.1 2021-02-16
2.9 2021-02-16
2.8 2021-02-13
2.7.1 2021-01-21
2.7 2021-01-10
2.6.3 2020-10-16
2.6.2 2020-10-09
2.6.1 2020-09-24
2.6 2020-09-17
2.5 2020-09-13
2.4.1 2020-09-13
2.4 2020-09-06
2.3 2020-09-06
2.2.6 2020-09-03
2.2.5 2020-08-30
2.2.3 2020-08-23
2.2.2 2020-08-17
2.2.1 2020-08-16
2.2 2020-08-14
$ this -> setUseInternalCache ( true );
$ rows = $ this -> select ( ' * ' )-> from ( ' table ' )-> where ([ ' i ' => 1 ])-> toList (); // read from the database
// ...
$ rows2 = $ this -> select ( ' * ' )-> from ( ' table ' )-> where ([ ' i ' => 1 ])-> toList (); // read from memory
// ...
$ rows3 = $ this -> select ( ' * ' )-> from ( ' table ' )-> where ([ ' i ' => 2 ])-> toList (); // read from the database because the query is in
// memory but the parameters are different
echo $ this -> internalCacheCounter ; The internal cache is tested with runRawQuery (if returns an array), toList(), meta() and first()
2.0.1 2020-08-12
2.0 2020-08-11
1.55.1 2020-08-05
1.55 2020-8-05
1.54 2020-8-02
1.53 2020-7-27
1.52 2020-7-19
1.51 2020-7-18
1.50 2020-7-04
1.49 2020-6-19
1.48 2020-6-15
1.47 2020-6-14
1.46 2020-6-13
1.45.1 2020-6-11
1.45 2020-6-7
1.44.2 2020-6-3
1.44.1 2020-6-2
1.44 2020-5-31
1.43 2020-5-31
1.42 2020-5-29
1.41.2 2020-5-29
1.41.1 2020-5-28
1.41 2020-5-28
1.40.1 2020-5-27
1.40 2020-05-21
1.39 2020-05-12
1.38 2020-05-10
1.37 2020-05-03
1.36 2020-05-03
1.35.1 2020-04-30
1.35 2020-04-28
1.34.2 2020-04-27
1.34.1 2020-04-27
1.34 2020-04-27
1.33 2020-04-15
1.32.1 BasePdoOneRepo added version 2.0
1.32 2020-04-12
1.31.1 2020-04-11
1.31 2020-04-11
1.30 2020-04-10
1.29 2020-04-10
1.28.1 2020-04-06
1.28 2020-04-06
1.24 2020-03-26
1.23.1 2020-03-10
1.23 2020-03-10
1.22 2020-02-08
1.21 2020-02-07
1.20 2020-jan-25
1.19 2020-jan-15
1.16 2020-jan-14
1.15 2019-dec-29
1.14 2019-dec-26
1.13 2019-dec-26
1.12 2019-oct-20 Added argument (optional) ->toList($pdomodel) Added method ->toListSimple()
1.11 2019-oct-01 1.11 It is still compatible with php 5.6.Added to composer.json
1.10 2019-oct-01 1.10 Added method dateConvert(). Added trace to the throw.
1.9 2019-aug-10 1.8 republished
1.8 2019-aug-10 Added a date format. Methods dateSql2Text() and dateText2Sql()
1.7 2019-jun-23 Added some benchmark. It also solves a problem with the tags. Now: table.field=? is converted to table . field =?
1.6 2019-jun-22 affected_rows() returns a correct value.
1.5 2019-may-31 some cleanups. columnTable() returns if the column is nullable or not.
1.4 2019-may-30 insertobject()
1.3 2019-may-23 New changes
1.2 2019-may-22 New fixed.
1.1 2019-may-21 Some maintenance
1.0 2019-may-21 First version