pdoone. มันเป็น wrapper ง่ายๆสำหรับไลบรารี PDO ของ PDP ที่เข้ากันได้กับ SQL Server (2008 R2 หรือสูงกว่า), MySQL (5.7 หรือสูงกว่า) และ Oracle (12.1 หรือสูงกว่า)
ห้องสมุดนี้พยายาม ทำงานให้เร็วที่สุด การดำเนินการส่วนใหญ่เป็นการจัดการสตริง/อาร์เรย์ที่เรียบง่ายและทำงานในโลหะเปลือยของไลบรารี PDO แต่ยังช่วยให้สามารถสร้าง ORM โดยใช้ส่วนขยาย EFTEC/PDOONEORM
เปิดสิ่งนี้
$ 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 ();ในเรื่องนี้
$ products = $ pdoOne
-> select ( " * " )
-> from ( " myTable " )
-> where ( " name = ? " ,[ $ _POST [ ' name ' ]])
-> toList ();หรือใช้ ORM (ใช้ไลบรารี EFTEC/PDOONEORM)
ProductRepo // this class was generated with echo $pdoOne()->generateCodeClass(['Product']); or using the cli.
:: where ( " name = ? " ,[ $ _POST [ ' name ' ]])
:: toList ();| ExampleTicketPhp | ตัวอย่างคัพเค้ก | การค้นหาตัวอย่าง | ตัวอย่างวิธีการที่แตกต่างกัน |
|---|---|---|---|
![]() | ![]() | ![]() |
ตัวอย่างเพิ่มเติม:
ตัวอย่าง MySQL PHP และ PDO โดยใช้ PDOONE
ไลบรารีนี้ต้องการ PHP 7.1 และสูงกว่าและต้องการส่วนขยาย PDO และส่วนขยาย PDO-MYSQL (MySQL), PDO-SQLSRV (SQL Server) หรือ PDO-OCI (Oracle)
แก้ไข Composer.json ข้อกำหนดถัดไปจากนั้นอัปเดตนักแต่งเพลง
{
"require" : {
"eftec/PdoOne" : " ^4.0.1 "
}
}หรือติดตั้งผ่าน CLI โดยใช้
นักแต่งเพลงต้องการ eftec/pdoone
เพียงดาวน์โหลดโฟลเดอร์ lib จากไลบรารีและใส่ในโครงการโฟลเดอร์ของคุณ จากนั้นคุณต้องรวมไฟล์ทั้งหมดที่รวมอยู่ด้วย
สร้างอินสแตนซ์ของคลาส pdoone ดังนี้ จากนั้นคุณสามารถเปิดการเชื่อมต่อโดยใช้ Method Connect () หรือเปิด ()
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 ();ที่ไหน
$ dao = new pdoone ("mysql", "127.0.0.1", "root", "abc.123", "sakila", "");
Oracle เป็นเรื่องยากที่จะติดตั้ง ใน Windows จากโฟลเดอร์ Bin ของ Oracle Home คุณต้องคัดลอก DLL ทั้งหมดไปยังโฟลเดอร์ PHP และโฟลเดอร์ Apache
ด้วยวิธี การ runrawQuery () เราสามารถดำเนินการคำสั่งโดยตรงไปยัง PDO ที่มีหรือไม่มีพารามิเตอร์ และมันอาจส่งคืน pdostatement หรือ อาร์เรย์ มันมีประโยชน์เมื่อเราต้องการความเร็ว
runrawQuery ($ rawsql, $ param, $ returnArray, $ fetchMode, $ fetchargument)
String $ RAWSQL การสืบค้นเพื่อดำเนินการอาร์เรย์ | null $ param [type1, value1, type2, value2] หรือ [name1 => value, name2 = value2] bool $ rewrayarray ถ้าเป็นจริง (ค่าเริ่มต้น) จากนั้นจะส่งคืนอาร์เรย์ หากเป็นเท็จมันจะส่งคืน pdostatement int $ fetchMode ระบุโหมดที่จะดึงข้อมูล ตัวอย่าง: pdo :: fetch_assoc null $ fetchargument อาร์กิวเมนต์ของ FetchMode
$ sql = ' select * from table where id=1 ' ;
$ pdoStatement = $ pdoOne -> runRawQuery ( $ sql ,[], false ); // [] are the parametersแต่เราสามารถเปลี่ยนมันเพื่อส่งคืนอาร์เรย์
$ sql = ' select * from table where id=1 ' ;
$ values = $ pdoOne -> runRawQuery ( $ sql ); // [] are the parametersเราสามารถผ่านพารามิเตอร์ได้
$ 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.หมายเหตุไลบรารีนี้ใช้คำสั่งที่เตรียมไว้ดังนั้นจึงไม่มีการฉีด SQL (ถ้าคุณใช้พารามิเตอร์)
$ 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.ด้วยวิธีการ runQuery () เราสามารถเรียกใช้คำสั่งที่เตรียมไว้ใน PDO มันมีประโยชน์เมื่อเราต้องการผ่านข้อโต้แย้ง RunQuery () ต้องใช้ PDO PreparedStatement
ไม่แนะนำวิธีนี้เว้นแต่คุณจะทำงานกับคำสั่ง PDO แล้วและคุณไม่ต้องการปรับรหัสทั้งหมดของคุณ
$ 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 );คุณสามารถใช้ตัวสร้างแบบสอบถามเพื่อสร้างคำสั่งของคุณ คุณสามารถตรวจสอบบทเกี่ยวกับ Query Builder (DQL) สำหรับข้อมูลเพิ่มเติม
// query builder
$ pdoOne -> set ([ ' name ' => ' cocacola ' ])
-> from ( ' product ' )
-> insert ();ห้องสมุด Eftec pdooneorm อนุญาตให้สร้าง [orm] (#orm) ของตารางของคุณ หากคุณสร้าง ORM คุณสามารถใช้รหัสถัดไปได้
ProductRepo:: toList ([ ' category ' => ' drink ' ]);โดยที่ Productrepo เป็นคลาสบริการที่สร้างขึ้นโดยใช้ ORM
โดยค่าเริ่มต้น PdoOne จะดำเนินการค้นหาในโหมด PDO :: FETCH_ASSOC คุณสามารถเปลี่ยนได้โดยเรียกใช้แบบสอบถามเป็น:
$ 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 อนุญาตให้ 5 วันที่
รูปแบบ SQL เป็นรูปแบบวิธีการจัดเก็บวันที่ไว้ในฐานข้อมูล ขึ้นอยู่กับประเภทของฐานข้อมูล ตัวอย่างเช่น MySQL สามารถใช้รูปแบบ YMD ได้
รูปแบบของมนุษย์ มันเป็นรูปแบบที่ผู้ใช้ดูวันที่ของเรา
รูปแบบวันที่ ISO มันเป็นรูปแบบวิธีการขนส่งและต่อเนื่อง
การประทับเวลา : นับจำนวนวินาทีหลังจาก 1-1-1970
คลาส / คลาส PHP : มันเป็นวัตถุ DateTime
มี 3 วิธีในการทำธุรกรรม:
| วิธี | คำอธิบาย |
|---|---|
| startTransaction () | มันเริ่มการทำธุรกรรม ขึ้นอยู่กับฐานข้อมูลประเภทอาจมีการซ้อนกันหรือไม่ |
| ให้สัญญา() | ทำธุรกรรม (และปิด) |
| ย้อนกลับ () | การย้อนกลับ (และปิด) การทำธุรกรรม |
ตัวอย่าง:
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.
}ส่งคืนจริงถ้าตารางมีอยู่ (ฐานข้อมูลปัจจุบัน/สคีมา)
ส่งคืนสถิติ (เป็นอาร์เรย์) ของคอลัมน์ของตาราง
$ stats = $ pdoOne -> statValue ( ' actor ' , ' actor_id ' );| นาที | สูงสุด | AVG | ผลรวม | นับ |
|---|---|---|---|---|
| 1 | 205 | 103.0000 | 21115 | 205 |
ส่งคืนคอลัมน์ทั้งหมดของตาราง
$ result = $ pdoOne -> columnTable ( ' actor ' );| colname | น้ำแข็ง | colsize | ผู้เข้าร่วมประชุม | นิ่มนวล | ISKEY | ความเป็นอยู่ |
|---|---|---|---|---|---|---|
| นักแสดง | สิ่งเล็ก ๆ น้อย ๆ | 5 | 0 | 1 | 1 | |
| first_name | Varchar | 45 | 0 | 0 | ||
| last_name | Varchar | 45 | 0 | 0 | ||
| last_update | การประทับเวลา | 0 | 0 |
ส่งคืนคีย์ต่างประเทศทั้งหมดของตาราง (ตารางต้นทาง)
สร้างตารางโดยใช้คำจำกัดความและคีย์หลัก
หมายเหตุ: คุณสามารถสร้างรหัสเพื่อสร้างตารางโดยใช้ตารางที่มีอยู่โดยการดำเนินการ CLI (รหัสเอาต์พุต)
php pdoone.php -database mysql -server 127.0.0.1 -user root -pwd abc.123 -db sakila -input film -output
ตัวอย่าง: (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 ' ); ตัวอย่าง (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 "
]);มันส่งคืนรายการตารางที่สั่งโดยการพึ่งพา (จากไม่ขึ้นอยู่กับการพึ่งพามากขึ้น)
หมายเหตุ : การดำเนินการนี้ไม่สามารถป้องกันได้เนื่องจากตารางอาจมีการอ้างอิงแบบวงกลม
$ 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> " ;มันตรวจสอบตารางหากตารางตรงกับคำจำกัดความที่กำหนดโดยค่า
$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));
มันส่งคืนกุญแจต่างประเทศทั้งหมดของตาราง
$ result = $ pdoOne -> foreignKeyTable ( ' actor ' );| คอลเลกอล | tablerem | Colrem |
|---|---|---|
| customer_id | ลูกค้า | customer_id |
| rental_id | ให้เช่า | rental_id |
| Staff_ID | พนักงาน | Staff_ID |
คุณสามารถสร้างแบบสอบถามขั้นตอน
ตัวอย่าง:
$ results = $ pdoOne -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ 1 ])
-> toList (); ระบุคอลัมน์ที่จะส่งคืน อาร์กิวเมนต์คือคำสั่ง SQL ดังนั้นจึงอนุญาตให้ดำเนินการใด ๆ ที่สนับสนุนฐานข้อมูลรวมถึงฟังก์ชั่นค่าคงที่ตัวดำเนินการนามแฝงและอื่น ๆ
$ results = $ pdoOne -> select ( " col1,col2 " ); //...สร้างแบบสอบถาม: เลือก COL1, COL2 ....
$ results = $ pdoOne -> select ( " select * from table " ); //->...สร้างแบบสอบถาม: เลือก * จากตาราง ....
สร้างแบบสอบถามที่ส่งคืนจำนวนค่า มันเป็นแมโครของวิธีการเลือก ()
$ 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 tableสร้างแบบสอบถามที่ส่งคืนค่าต่ำสุดของคอลัมน์ ถ้า $ arg ว่างเปล่าจะใช้ $ sql สำหรับชื่อของคอลัมน์มันเป็นแมโครของวิธีการเลือก ()
$ 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 tableสร้างแบบสอบถามที่ส่งคืนค่าสูงสุดของคอลัมน์ ถ้า $ arg ว่างเปล่าจะใช้ $ sql สำหรับชื่อของคอลัมน์มันเป็นแมโครของวิธีการเลือก ()
$ 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 tableสร้างแบบสอบถามที่ส่งคืนค่าผลรวมของคอลัมน์ ถ้า $ arg ว่างเปล่าจะใช้ $ sql สำหรับชื่อของคอลัมน์มันเป็นแมโครของวิธีการเลือก ()
$ 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 tableสร้างแบบสอบถามที่ส่งคืนค่าเฉลี่ยของคอลัมน์ ถ้า $ arg ว่างเปล่าจะใช้ $ sql สำหรับชื่อของคอลัมน์มันเป็นแมโครของวิธีการเลือก ()
$ 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 tableสร้างคำสั่ง SELECT
$ results = $ pdoOne -> select ( " col1,col2 " )-> distinct (); //...สร้างแบบสอบถาม: เลือก COL1 ที่แตกต่าง , COL2 ....
หมายเหตุ: -> แตกต่าง ('ไม่ซ้ำกัน') ส่งคืนที่ ไม่ซ้ำกัน ..
สร้างคำสั่ง "จาก" SQL
$ results = $ pdoOne -> select ( " * " )-> from ( ' table ' ); //...สร้างแบบสอบถาม: เลือก * จากตาราง
$ ตาราง อาจเป็นตารางเดียวหรือการก่อสร้าง SQL สำหรับ examp คำสั่งถัดไปนั้นถูกต้อง:
$ results = $ pdoOne -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ); //...สร้างคำสั่งที่ไหน
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ); //...สถานที่สามารถแสดงออกได้ในรูปแบบที่แตกต่างกัน
เป็นไปได้ที่จะเขียนตำแหน่งที่ไม่มีพารามิเตอร์ดังนี้:
$ 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 % " ]);มันยังใช้งานได้
// (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]); มันเป็นคำจำกัดความชวเลขของแบบสอบถามโดยใช้อาร์เรย์เชื่อมโยงซึ่งคีย์คือชื่อของคอลัมน์และค่าคือค่าที่จะเปรียบเทียบ
ใช้งานได้กับ ความเท่าเทียม (=) และตัวดำเนินการตรรกะ 'และ' (ประเภทถูกกำหนดโดยอัตโนมัติ)
// 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 ' ]); นอกจากนี้ยังเป็นไปได้ที่จะระบุประเภทของพารามิเตอร์
// 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 ' ]]); คุณสามารถใช้อาร์เรย์แบบเชื่อมโยงเป็นอาร์กิวเมนต์และชื่อพารามิเตอร์ในแบบสอบถาม
$ results = $ pdoOne -> select ( " * " )-> from ( " table " )
-> where ( ' condition=:p1 and condition2=:p2 ' ,[ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();สร้างแบบสอบถาม: เลือก * จากตาราง ที่เงื่อนไข =? (coca-cola) และเงื่อนไข 2 =? (1)
สร้างแบบสอบถาม: เลือก * จากตาราง ที่ p1 = 1
หมายเหตุ: ArrayParameters เป็นอาร์เรย์ดังนี้: พิมพ์ค่า
โดยที่ประเภทคือ i = จำนวนเต็ม, d = double, s = string หรือ b = blob ในกรณีที่มีข้อสงสัยให้ใช้ "s" (ดูตารางร้อง)
ตัวอย่างของ ArrayParameters:
[1, 'Hello', 20.3, 'World']
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ 1 ]); //...สร้างแบบสอบถาม: เลือก * จากตาราง ที่ p1 =? (1)
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ 1 , ' hello ' ]); //...สร้างแบบสอบถาม: เลือก * จากตาราง ที่ p1 =? (1) และ p2 =? ('สวัสดี')
บันทึก. ที่ไหนจะซ้อนกัน
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ 1 ])
-> where ( ' p2=? ' ,[ ' hello ' ]); //...สร้างแบบสอบถาม: เลือก * จากตาราง ที่ p1 =? (1) และ p2 =? ('สวัสดี')
คุณสามารถใช้:
$ results = $ pdoOne -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();สร้างแบบสอบถาม: เลือก * จากตาราง ที่ p1 =? (coca-cola) และ p2 =? (1)
สร้างคำสั่งสั่งซื้อ
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ); //...สร้างแบบสอบถาม: เลือก * จาก ลำดับตารางโดย P1 DESC
สร้างคำสั่งกลุ่ม
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ); //...สร้างแบบสอบถาม: เลือก * จาก กลุ่มตารางโดย P1
สร้างคำสั่งที่มี
หมายเหตุ: ใช้พารามิเตอร์เดียวกันกับ ที่ ()
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( 1 )); //...สร้างแบบสอบถาม: เลือก * จากกลุ่มตารางโดย p1 มี p1>? (1)
หมายเหตุ: การมีความซ้อนกันมี ()-> มี ()
หมายเหตุ: การมีพารามิเตอร์ที่ไม่มี ('col> 10')
เรียกใช้แบบสอบถามสร้าง
หมายเหตุหาก returnArray เป็นจริงหรือไม่ก็จะส่งคืนอาร์เรย์ที่เชื่อมโยงกัน หาก returnArray เป็นเท็จแสดงว่าจะส่งคืน mysqli_result
หมายเหตุ: มันรีเซ็ตพารามิเตอร์ปัจจุบัน (เช่น Select ปัจจุบันจากที่ไหน ฯลฯ )
มันเป็นมาโครของ rungen () มันส่งคืนอาร์เรย์เชื่อมโยงหรือเท็จหากการดำเนินการล้มเหลว
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toList (); มันส่งคืน pdostatement จากแบบสอบถามปัจจุบัน
หมายเหตุ: หากคุณต้องการวนซ้ำคำสั่งคุณสามารถใช้ fetchloop ()
ตัวอย่าง :
$ stmt = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toPdoStatement ();
while ( $ row = $ stmt -> fetch ()) {
// do something
} มันดึงข้อความค้นหาสำหรับทุก ๆ แถว
วิธีนี้สามารถใช้ได้เมื่อเราไม่ต้องการอ่านข้อมูลทั้งหมดพร้อมกันดังนั้นคุณสามารถอ่านและประมวลผลแต่ละบรรทัดแยกกัน
ตัวอย่าง :
$ this -> select ( ' select id,name from table ' )
-> fetchLoop ( static function ( $ row ) { return ( $ row );}, PDO :: FETCH_ASSOC )มันส่งคืน metacode (คำจำกัดความ) ของแต่ละคอลัมน์ของแบบสอบถาม
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toMeta (); หรือ
$ results = $ pdoOne -> toMeta ( ' select * from table ' ); ผลลัพธ์:
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)
}
}
มันเป็นมาโครของ Rungen มันส่งคืนอาร์เรย์ที่จัดทำดัชนีจากคอลัมน์แรก
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toListSimple (); // ['1','2','3','4'] มันส่งคืนอาร์เรย์ที่เชื่อมโยงซึ่งค่าแรกคือคีย์และที่สองคือค่า
หากไม่มีค่าที่สองให้ใช้ดัชนีเป็นค่า (ค่าแรก)
$ results = $ pdoOne -> select ( " cod,name " )
-> from ( ' table ' )
-> toListKeyValue (); // ['cod1'=>'name1','cod2'=>'name2'] มันเป็นมาโครของ Rungen มันส่งคืน mysqli_result หรือ null
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> toResult (); // มันส่งคืนสเกลาร์แรก (หนึ่งค่า) ของแบบสอบถาม ถ้า $ colname เป็น null ให้ใช้คอลัมน์แรก
$ count = $ this -> count ( ' from product_category ' )-> firstScalar ();มันเป็นมาโครของ Rungen มันส่งคืนแถวแรกหากมีถ้าไม่เช่นนั้นจะส่งคืนเท็จเป็นอาร์เรย์ที่เชื่อมโยงกัน
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> first (); มันเป็นมาโครของ Rungen มันส่งคืนแถวสุดท้าย (ถ้าไม่มีถ้าไม่ส่งกลับเท็จ) เป็นอาร์เรย์ที่เชื่อมโยงกัน
$ results = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> last (); บางครั้งมีประสิทธิภาพมากขึ้นในการเรียกใช้คำสั่งซื้อ () และครั้งแรก () เพราะล่าสุด () อ่านค่าทั้งหมด
มันส่งคืนคำสั่ง SQL และสตริง
$ sql = $ pdoOne -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ pdoOne -> toList (); // executes the queryหมายเหตุ: มันไม่ได้รีเซ็ตแบบสอบถาม
มีสี่วิธีในการดำเนินการแต่ละคำสั่ง
สมมติว่าเราต้องการเพิ่ม จำนวนเต็ม ในคอลัมน์ COL1 ด้วยค่า 20
สคีมาและค่าโดยใช้รายการของค่า : โดยที่ค่าแรกคือคอลัมน์ที่สองคือประเภทของค่า (i = จำนวนเต็ม, d = double, s = string, b = blob) และอาร์เรย์ที่สองมีค่า
$ pdoOne -> insert ( " table "
,[ ' col1 ' ]
,[ 20 ]);สคีมาและค่าในรายการเดียวกัน : โดยที่ค่าแรกคือคอลัมน์ที่สองคือประเภทของค่า (i = จำนวนเต็ม, d = double, s = string, b = blob) และที่สามคือค่า
$ pdoOne -> insert ( " table "
,[ ' col1 ' , 20 ]);สคีมาและค่าโดยใช้สองอาร์เรย์เชื่อมโยง :
$ pdoOne -> insert ( " table "
,[ ' col1 ' ]
,[ ' col1 ' => 20 ]);สคีมาและค่าโดยใช้อาร์เรย์แบบเชื่อมโยงเดียว : ประเภทจะถูกคำนวณโดยอัตโนมัติ
$ pdoOne -> insert ( " table "
,[ ' col1 ' => 20 ]);สร้างคำสั่งแทรก
$ pdoOne -> insert ( " producttype "
,[ ' idproducttype ' , ' name ' , ' type ' ]
,[ 1 , ' cocacola ' , 1 ]);ใช้โซ่ซ้อน (อาร์เรย์เดี่ยว)
$ pdoOne -> from ( " producttype " )
-> set ([ ' idproducttype ' , 0 , ' name ' , ' Pepsi ' , ' type ' , 1 ])
-> insert ();ใช้ชุดโซ่ซ้อนกันหลายชุด
$ pdoOne -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ 101 ])
-> set ( ' name=? ' ,[ ' Pepsi ' ])
-> set ( ' type=? ' ,[ 1 ])
-> insert ();หรือ (ประเภทถูกกำหนดให้เป็นไปได้โดยอัตโนมัติโดย MySQL)
$ pdoOne -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert (); $ pdoOne -> insertObject ( ' table ' ,[ ' Id ' => 1 , ' Name ' => ' CocaCola ' ]);ใช้ชุดประกาศโซ่ซ้อนกัน
$ pdoOne -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ 100 , ' Pepsi ' , 1 ])
-> insert ();สร้างแบบสอบถาม: แทรกลงใน productype (idproductType, ชื่อ, ประเภท) ค่า (?,?,?) ....
สร้างคำสั่งแทรก
$ 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 (); // updateหรือ
$ pdoOne -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ 6 ]) // where
-> update (); // updateสร้างแบบสอบถาม: อัปเดต ProductType Set
name=?,type=?idproducttype= ที่ไหน? -
สร้างคำสั่งลบ
$ pdoOne -> delete ( " producttype "
,[ ' idproducttype ' ] // where
,[ 7 ]); // where $ pdoOne -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // whereสร้างแบบสอบถาม: ลบจาก ProductType โดยที่
idproducttype=? -
นอกจากนี้คุณยังสามารถลบผ่านห่วงโซ่ Builder DQL
$ pdoOne -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ 7 ]) // where
-> delete (); $ pdoOne -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete (); สร้างแบบสอบถาม: ลบจาก ProductType โดยที่
idproducttype=? -
เป็นไปได้ที่จะเลือกแคชผลลัพธ์ของการสืบค้น ระยะเวลาของการสืบค้นถูกกำหนดไว้ในแบบสอบถาม หากผลลัพธ์ของการสืบค้นไม่ได้ถูกแคชแล้วจะถูกคำนวณตามปกติ (ดำเนินการค้นหาในฐานข้อมูล) สำหรับการระบุแบบสอบถามว่าไม่ซ้ำกันระบบจะสร้าง ID (UID) ที่ไม่ซ้ำกันตามใน Sha256 ที่สร้างขึ้นด้วยการสืบค้นพารามิเตอร์วิธีการและประเภทของการดำเนินการ
ไลบรารีไม่ได้ดำเนินการแคชใด ๆ โดยตรง แต่อนุญาตให้แคชผลลัพธ์โดยใช้ไลบรารีภายนอก
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) ตั้งค่าบริการแคช
$ pdoOne = new PdoOne ( " mysql " , " 127.0.0.1 " , " travis " , "" , " travisdb " );
$ cache = new CacheService ();
$ $ pdoOne -> setCacheService ( $ cache );(3) ใช้แคชดังนี้เราต้องเพิ่มวิธี การ USECACHE () ในส่วนใดส่วนหนึ่งของการสืบค้น
$ 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 ();Sequence เป็นอีกทางเลือกหนึ่งสำหรับฟิลด์ Auto_numeric (Identity) มันมีสองวิธีในการสร้างลำดับ: เกล็ดหิมะ และ ลำดับ มันเป็นทางเลือกในการสร้าง GUID เป็นหลักเพราะมันส่งคืนตัวเลข (GUID มักจะเป็นสตริงที่มีราคาแพงกว่าในการจัดทำดัชนีและจัดเก็บ)
เป้าหมายของลำดับคือการสร้างตัวเลขที่ไม่ซ้ำกันซึ่งไม่เคยทำซ้ำ
$ 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.เป็นไปได้ที่จะสร้างลำดับใหม่โดยไม่มีตารางใด ๆ มันเร็ว แต่อาจมีปัญหาการชน
มันทำให้มั่นใจได้ว่าหมายเลขฟรีการชนกันเฉพาะในกรณีที่เราไม่ทำมากกว่า หนึ่งการดำเนินการต่อ 0.0001 วินาที อย่างไรก็ตามมันยังเพิ่มหมายเลขสุ่มหลอก (0-4095 ตามเวลา) ดังนั้นโอกาสของการชนคือ 1/4095 (ต่อการดำเนินการสองครั้งทุกครั้งที่ 0.0001 วินาที) มันขึ้นอยู่กับหมายเลขเกล็ดหิมะของ Twitter เช่น. คุณมีความปลอดภัยในการชนกันหากคุณทำน้อยกว่า 1 ล้านการดำเนินงานต่อวินาที (ในทางเทคนิค: 45 ล้าน)
$ pdo-> getSequencePhp ([ไม่สามารถคาดเดาได้ = false]) ส่งคืนลำดับโดยไม่ต้องใช้ตาราง ลำดับนี้มีประสิทธิภาพมากกว่า $ dao-> getsequence แต่ใช้ค่าสุ่มเพื่อจัดการกับการชน
หาก upredictable เป็นจริงจะส่งกลับหมายเลขที่คาดเดาไม่ได้ (มันพลิกตัวเลขบางอย่าง)
$ 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" | สนาม | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| $ prefixbase | หากเราต้องการเพิ่มคำนำหน้าในทุกตาราง | $ this-> prefixBase = 'example_'; |
| $ InternalCacheCounter | เคาน์เตอร์ของการโจมตีของแคชภายใน | $ this-> InternalCacheCounter =; |
| $ nodeid | ใช้โดยลำดับ (เกล็ดหิมะ) NodeID เป็นตัวระบุของโหนด ต้องอยู่ระหว่าง 0..1023 | $ this-> nodeId = 3; |
| $ tablesequence | ชื่อของลำดับตาราง (เกล็ดหิมะ) | $ this-> tablesequence = "tableseq1"; |
| $ masks0 | หากเราต้องการสร้างหมายเลขที่คาดเดาไม่ได้ (ใช้ตามลำดับ) | $ this-> masks0 = [0,1,2,3,4]; |
| $ masks1 | หากเราต้องการสร้างหมายเลขที่คาดเดาไม่ได้ (ใช้ตามลำดับ) | $ this-> masks1 = [4,3,2,1,0]; |
| $ databasetype | ประเภทฐานข้อมูลปัจจุบัน มันถูกตั้งค่าผ่าน El Constructor | echo $ this-> databasetype; |
| $ เซิร์ฟเวอร์ | เครื่องเซิร์ฟเวอร์ปัจจุบัน | Echo $ this-> เซิร์ฟเวอร์; |
| ผู้ใช้ $ | ผู้ใช้ปัจจุบัน | Echo $ this-> ผู้ใช้; |
| $ PWD | รหัสผ่านปัจจุบัน | echo $ this-> pwd; |
| $ db | ฐานข้อมูลหรือสคีมาปัจจุบัน (Oracle ละเว้นค่านี้) | echo $ this-> db; |
| $ charset | เพื่อตั้งค่าถ่านเริ่มต้น จะต้องตั้งค่าผ่านตัวสร้าง | echo $ this-> charset; |
| $ isopen | มันเป็นความจริงถ้าฐานข้อมูลเชื่อมต่อเป็นอย่างอื่นมันเป็นเท็จ | ถ้า ($ this-> isopen) {…}; |
| $ throwonerror | ถ้าเป็นจริง (ค่าเริ่มต้น) แล้วจะเกิดข้อผิดพลาดหากเกิดข้อผิดพลาด ถ้าเป็นเท็จการดำเนินการจะดำเนินต่อไป | $ this-> throwonerror = false; |
| $ conn1 | อินสแตนซ์ของ PDO คุณสามารถตั้งค่าหรือใช้โดยตรง | $ this-> conn1-> pdostatement (.. ); |
| $ transactionopen | จริงถ้าการทำธุรกรรมเปิดอยู่ | if ($ this-> transactionOpen) {…}; |
| $ Readonly | หากฐานข้อมูลอยู่ในโหมดอ่านเท่านั้นหรือไม่ ถ้าเป็นจริงเราต้องหลีกเลี่ยงการเขียนในฐานข้อมูล | $ this-> readonly = true; |
| $ logfile | ชื่อไฟล์เต็มรูปแบบของไฟล์บันทึก หากว่างเปล่าก็จะไม่เก็บไฟล์บันทึก ไฟล์บันทึกถูก จำกัด ไว้ที่ 1MB | $ this-> logfile = "/folder/file.log"; |
| $ errortext | มันเก็บข้อผิดพลาดสุดท้าย runget และ rementry จะรีเซ็ต | echo $ this-> errortext; |
| $ isthrow | สิ่งที่ต้องทำ | $ this-> isthrow =; |
| $ loglevel | มันระบุระดับบันทึกปัจจุบัน 0 = ไม่มีบันทึก (สำหรับการผลิต), 3 = บันทึกเต็มรูปแบบ | $ this-> loglevel = 3; |
| $ LastQuery | การสอบถามล่าสุดดำเนินการ | echo $ this-> LastQuery; |
| $ lastparam | พารามิเตอร์สุดท้าย มันเป็นอาร์เรย์ที่เชื่อมโยงกัน | echo $ this-> lastparam; |
ห้องสมุดนี้อนุญาตให้มีการเข้ารหัส/ถอดรหัสข้อมูล
ในการตั้งค่าการเข้ารหัสคุณสามารถใช้คำสั่งถัดไป:
$ 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.จากนั้นคุณสามารถเข้ารหัสและถอดรหัสค่าโดยใช้
$ encrypted = $ this -> encrypt ( $ original ); // encrypt $original
$ original = $ this -> decrypt ( $ encrypted ); // decrypt $encryptedตัวอย่าง:
$ 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. คุณสามารถตั้งค่าระดับบันทึกเป็น 3 ระดับบันทึกจะทำงานเมื่อการดำเนินการล้มเหลวยิ่งระดับบันทึกที่สูงขึ้นจากนั้นจะแสดงข้อมูลส่วนใหญ่
$ pdoOne -> logLevel = 3 ; // the highest for debug.โดยค่าเริ่มต้น PDOONE พ่นข้อผิดพลาด PHP แต่เราสามารถหลีกเลี่ยงได้โดยการตั้งค่าฟิลด์ $ throwonerror เป็นเท็จ
$ 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.หากว่างเปล่าจะไม่สร้างไฟล์บันทึก (โดยใช้ไฟล์บันทึก php)
$ pdoOne -> logFile = true ; PdoOne มีคุณสมบัติบางอย่างเฉพาะใน CLI

ดำเนินการบรรทัดถัดไป (ในโฟลเดอร์ lib)
php pdoonecli.php
(หรือชี้ไปที่โฟลเดอร์ขวา)
php/var/web/vendor/eftec/lib/pdoonecli
คุณสามารถใช้ธง "-i" เพื่อเข้าสู่โหมดอินเทอร์แอคทีฟ
คุณสามารถใช้คีย์แท็บเพื่อเพิ่มค่าอัตโนมัติ (ถ้ามี)

หมายเหตุ: คุณสามารถบันทึกและโหลดการกำหนดค่า
เชื่อมต่อกับ MySQL และสร้าง CSV จากตาราง "นักแสดง"
# # 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 csvบันทึกการกำหนดค่าในไฟล์
php pdoonecli --databasetype mysql --server 127.0.0.1 -u root -p abc.123 --database sakila --saveconfig myconfigโหลดการกำหนดค่าจากไฟล์
php pdoonecli --loadconfig myconfig -in actor -out csvคุณสามารถใช้ธง "-Cli" เพื่อสร้างคลาสที่เก็บ

CLI มีการโต้ตอบและอนุญาตให้โหลดและบันทึกการกำหนดค่า
ฟังก์ชั่นจะสร้างคลาสที่เก็บแบบพร้อมใช้งาน
สมมติว่าตัวอย่างต่อไป
mysql:
php pdoone.php -database mysql -เซิร์ฟเวอร์ 127.0.0.1:3306 -ผู้ใช้รูท -p abc.123 -db sakila -อินพุต "นักแสดง"
SQLSRV:
php pdoone.php -database SQLSRV -เซิร์ฟเวอร์ PCJC SQLEXPRES
มันจะเชื่อมต่อกับฐานข้อมูล MySQL, IP: 127.0.0.1 และฐานข้อมูล Sakila และจะอ่านตาราง "นักแสดง"
มันจะส่งคืนผลลัพธ์ต่อไป
/**
* 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
}
// .....
}ฟังก์ชั่นนี้จะสร้างคลาสที่เก็บใหม่ด้วยการดำเนินการที่พบบ่อยที่สุด: แทรก, รายการ, อัปเดต, ลบ, รับ, นับ, สร้างตาราง, ตารางดรอปและตารางการตัดทอน
ทำไมเราต้องสร้างชั้นเรียน? (แทนที่จะสืบทอดหนึ่ง) คลาส CRUD นี้เป็นเพียงจุดเริ่มต้น นักพัฒนาสามารถปรับเปลี่ยนรหัสเพิ่มวิธีการใหม่แก้ไขวิธีก่อนหน้าและอื่น ๆ
สำหรับการใช้คลาสเราสามารถเขียนรหัสถัดไป:
// 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.หรือคุณสามารถสร้างไฟล์ PHP โดยอัตโนมัติดังนี้:
php pdoone.php -database mysql -server 127.0.0.1:3306 -user root -pwd abc.123 -db sakila -input "นักแสดง"
หมายเหตุ: รหัสขาด php-tags เนมสเปซและการใช้งาน แต่ทุกอย่างอยู่ที่นี่
จะใช้การสืบค้นและจะส่งคืนรหัส PHP ด้วยแบบสอบถามที่จัดรูปแบบ
ตัวอย่าง:
php pdoone.php -database mysql -server 127.0.0.1:3306 -user root -pwd abc.123 -db sakila -input "เลือก * จากนักแสดง"
มันจะสร้างรหัสถัดไป:
/** @var array $result=array(["actor_id"=>0,"first_name"=>'',"last_name"=>'',"last_update"=>'']) */
$ result = $ pdo
-> select ( " * " )
-> from ( " actor " )
-> toList ();มันจะสร้างอาร์เรย์เชื่อมโยง (ที่มีค่าเริ่มต้น) ตามที่เลือกไว้ในคิวรีหรือตารางที่เลือก
php pdoone.php -database mysql -server 127.0.0.1:3306 -user root -pwd abc.123 -db sakila -input "เลือก * จากนักแสดง"
มันจะกลับมา:
// ["actor_id"=>0,"first_name"=>'',"last_name"=>'',"last_update"=>'']มันจะส่งคืนผลลัพธ์ของการสืบค้นเป็น JSON
php pdoone.php -database mysql -server 127.0.0.1:3306 -user root -pwd abc.123 -db sakila -input "เลือก * จากนักแสดง" -output json
มันจะกลับมา:
[{ "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 " }]มันจะส่งคืนผลลัพธ์ของการสืบค้นเป็น JSON
php pdoone.php -database mysql -server 127.0.0.1:3306 -user root -pwd abc.123 -db sakila -input "เลือก * จากนักแสดง" -output csv
มันจะกลับมา:
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"
อีกทางเลือกหนึ่งกับ CLI ไลบรารีมีภาพอินเทอร์เฟซ มันดำเนินการทั้งหมดของ CLI

เพียงโทรหาวิธีการเรนเดอร์ ()
<?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 ();มีตัวอย่างในตัวอย่างโฟลเดอร์/testui.php
คำสั่งถัดไปมักจะดำเนินการเพียงอย่างเดียว (ไม่ใช่ในห่วงโซ่ของวิธีการ)
| วิธี | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| CreateTable () | สร้างตารางและดัชนีโดยใช้คำจำกัดความภายใน repo | TablaparentRepo :: CreateTable (); |
| CreateFoeRIGNKEYS () | สร้างคีย์ต่างประเทศทั้งหมดของตาราง | TablaparentRepo :: CreateForeignKeys (); |
| Droptable () | วางโต๊ะ | TablaparentRepo :: Droptable (); |
| ตัด() | ตัดทอนตาราง | TablaparentRepo :: truncate (); |
| Validtable () | ตรวจสอบว่าตารางไม่เปลี่ยนแปลง | $ 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 clasผู้ประกอบการที่ซ้อนกันเป็นวิธีการที่ควรอยู่ระหว่างการใช้วิธีการของเรา
ClassRepo :: op () :: สถานที่ () :: finalop () คือ✅
ClassRepo :: op () :: op () :: ที่ไหน () จะเปิดโซ่เปิด
ตัวอย่างเช่น:
// 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| วิธี | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| ที่ไหน() | มันเพิ่มตำแหน่งไปยังโซ่ | TablaparentRepo :: ที่ไหน () |
| คำสั่ง() | มันเพิ่มคำสั่งโดยไปยังห่วงโซ่ | TablaparentRepo :: order () |
| กลุ่ม() | มันเพิ่มกลุ่มโดยไปยังโซ่ | TablaparentRepo :: Group () |
| ขีด จำกัด () | มัน จำกัด ผลลัพธ์ | TablaparentRepo :: Limit () |
| หน้าหนังสือ() | มันคล้ายกับขีด จำกัด แต่ใช้หน้า | TablaparentRepo :: Page () |
| InnerJoin () | มันเพิ่มการเข้าร่วมด้านในในแบบสอบถาม | TablaparentRepo :: InnerJoin () |
| ซ้าย() | มันเพิ่มการเข้าร่วมด้านซ้ายไปยังแบบสอบถาม | TablaparentRepo :: left () |
| ขวา() | มันเพิ่มการเข้าร่วมที่ถูกต้องในการสืบค้น | TablaparentRepo :: Right () |
เรามีวิธีการต่าง ๆ ในการสร้างคำสั่ง DQL (Query) ในฐานข้อมูลของเรา
หากการดำเนินการล้มเหลวพวกเขาจะกลับมาเป็นเท็จและพวกเขาสามารถเรียกใช้ข้อยกเว้นได้
วิธีการต่อไปควรอยู่ที่ส่วนท้ายของห่วงโซ่ ตัวอย่าง:
ClassRepo :: op () :: op () :: tolist () คือ✅
classRepo :: op () :: tolist () :: op () จะทริกเกอร์ข้อยกเว้น
| สั่งการ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| tolist () | ส่งคืนอาร์เรย์ขององค์ประกอบ | $ data = tablenamerepo :: tolist (); // เลือก * จาก tableRepo $ data = tablenamerepo :: ที่ไหน ('a1 =?', [$ value]) :: tolist (); // เลือก * จาก tableRePo โดยที่ a1 = $ value |
| อันดับแรก() | ส่งคืนแถวง่าย ๆ | $ data = tablenamerepo :: First ($ pk); // เลือก * จาก tableRepo โดยที่ pk = $ pk (มันจะส่งคืนค่า 1 หรือศูนย์เสมอ) $ data = tablenamerepo :: ที่ไหน ('a1 =?', [$ value]) :: First (); // มันส่งคืนค่าแรก (หรือเท็จหากไม่พบ) |
| มีอยู่() | ส่งคืนจริงหากมีคีย์หลักอยู่ | $ data = tablenamerepo :: มีอยู่ ($ pk); // ส่งคืนจริงถ้าวัตถุมีอยู่ |
| นับ() | ส่งคืนจำนวนแถวในแบบสอบถาม | $ data = tablenamerepo :: count ($ เงื่อนไข); $ data = tablenamerepo :: ที่ไหน ('a1 =?', [$ value]) :: count (); |
วิธีการถัดไปอนุญาตให้แทรกอัปเดตหรือลบค่าในฐานข้อมูล
| วิธี | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| แทรก | มันแทรกค่าลงในฐานข้อมูล มันสามารถคืนข้อมูลประจำตัวได้ | $ identity = tablaparentRepo :: แทรก ($ obj); |
| อัปเดต | มันอัปเดตค่าลงในฐานข้อมูล | TablaparentRepo :: Update ($ OBJ); |
| ลบ | มันลบค่าออกจากฐานข้อมูล | TablaparentRepo :: DELETE ($ OBJ); |
| deleteByID | มันจะลบค่า (ใช้คีย์หลักเป็นเงื่อนไข) จากฐานข้อมูล | 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);เป็นไปได้ที่จะตรวจสอบโมเดล โมเดลได้รับการตรวจสอบความถูกต้องโดยใช้ข้อมูลของฐานข้อมูลโดยใช้ประเภทของคอลัมน์ความยาวหากค่าอนุญาตให้ null และถ้าเป็นตัวตน (ตัวเลขอัตโนมัติ)
$ obj =[ ' IdUser ' => 1 , ' Name ' ='John Doe'];
UserRepo:: validateModel ( $ obj , false ,[ ' _messages ' ]); // returns true if $obj is a valid User.อาร์เรย์แบบเรียกซ้ำเป็นอาร์เรย์ของสตริงที่มีค่าที่สามารถอ่านหรือได้รับหรือเปรียบเทียบ ตัวอย่างเช่นการเข้าร่วมตารางอย่างมีเงื่อนไข PdoOne ไม่ได้ใช้โดยตรง แต่ _basepdoonerepo ใช้มัน (_basepdoonerepo เป็นคลาสที่ใช้เมื่อเราสร้างคลาสบริการที่เก็บโดยอัตโนมัติ)
ตัวอย่าง
$ 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. มันตั้งค่าอาเรย์แบบเรียกซ้ำ
ค่านี้จะรีเซ็ตทุกครั้งที่วิธีการลูกโซ่สิ้นสุดลง
มันได้รับอาเรย์แบบเรียกซ้ำ
มันจะกลับมาเป็นจริงหาก Recursive มีเข็มบางอย่าง
ถ้า $ this-> Recursive คือ ['*'] มันจะส่งคืนจริงเสมอ
$ this -> select ( ' * ' )-> from ( ' table ' )-> recursive ([ ' * ' ]);
$ this -> hasRecursive ( ' anything ' ); // it always returns true. | ห้องสมุด | แทรก | FindPK | ให้ความชุ่มชื้น | กับ | เวลา |
|---|---|---|---|---|---|
| PDO | 671 | 60 | 278 | 887 | 3,74 |
| pdoone | 774 | 63 | 292 | 903 | 4,73 |
| LessQL | 1413 | 133 | 539 | 825 | 5,984 |
| Yiim | 2260 | 127 | 446 | ค.ศ. 1516 | 8,415 |
| yiimwithcache | 2468 | 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 | 2503 | 11,781 |
| propel20withcache | ค.ศ. 1519 | 68 | 1045 | 1454 | 8,228 |
| propel20formatondemand | ค.ศ. 1501 | 72 | 994 | 1423 | 8,228 |
| หลักคำสอน | 2119 | 250 | ค.ศ. 1592 | 1258 | 18,139 |
| doctrinemwithcache | 2084 | 243 | 2177 | 1155 | 17,952 |
| Doctrinemarrayhydrate | 2137 | 240 | 1230 | 877 | 16,83 |
| Doctrinemscalarhydrate | 2084 | 392 | ค.ศ. 1542 | 939 | 18,887 |
| Doctrinemwithoutproxies | 2119 | 252 | 1432 | 2503 | 19,822 |
| มีคารมคมคาย | 3691 | 228 | 708 | 1413 | 12,155 |
PdoOne เพิ่ม ovehead เล็กน้อยเหนือ PDO แต่มันเป็นเสื้อคลุมที่ง่ายสำหรับ PDO
หมายความว่าคุณได้รับการอัปเดต PDOONE และคุณใช้คลาสหนึ่งคลาสที่สร้างโดย ORM คลาสนี้จะต้องสร้างใหม่
สั้น:
ทุกรุ่นหลักหมายความว่าสามารถทำลายรหัสเก่าได้ เช่น 1.0 -> 2.0
ทุกรุ่นรองหมายความว่ามันเพิ่มฟังก์ชั่นใหม่เช่น 1.5 -> 1.6 (วิธีการใหม่)
ทุกรุ่นทศนิยมหมายความว่าแพตช์/แก้ไข/refactoring ฟังก์ชั่นก่อนหน้าเช่น 1.5.0 -> 1.5.1 (แก้ไข)
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'); // ตอนนี้
[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