DaoOne . มันเป็น wrapper ธรรมดาสำหรับ Mysqli
ห้องสมุดนี้เร็วที่สุด การดำเนินการส่วนใหญ่เป็นการจัดการสตริง/อาร์เรย์อย่างง่าย
หมายเหตุ: รุ่นนี้ถูกย้ายไปที่ https://github.com/EFTEC/PdoOne
PdoOne ทำงานเดียวกัน แต่ใช้งานได้กับไลบรารี PDO (แทน MySQLi) ขณะนี้ PdoOne ทำงานร่วมกับ Mysqli และ SqlSrv ได้ แต่มีคุณสมบัติอื่น ๆ อีกมากมายที่จะไม่ปรากฏบน DaoOne
ติดตั้งผ่านผู้แต่ง
ผู้แต่งต้องการ eftec/pdoone
ไลบรารีนี้สามารถทำงานควบคู่กับ eftec/ DaoOne ได้
เปลี่ยนคลาส แทนที่จะใช้ eftec/ DaoOne -> eftec/pdoone
ตัวอย่าง:
ก่อน:
/** @var eftec DaoOne $db */
$ db = null ;
หลังจาก:
/** @var eftecPdoOne $db */
$ db = null ;
ก่อน:
$ db = new DaoOne ( ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
หลังจาก:
$ db = new DaoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' ); // check 'mysql'
หากเราใช้ DaoOne ::runGen(false) เราจะต้องตรวจสอบผลลัพธ์ runGen ( DaoOne ) ส่งคืนวัตถุ mysqli_result runGen (PdoOne) ส่งคืนวัตถุ pdostatement
ก่อน:
$ result = $ db -> runGen ( false ); // it returns a mysqli_result
$ result -> fetch_assoc ();
$ result -> free_result ();
หลังจาก:
$ result = $ db -> runGen ( false ); // it returns a pdostatement
$ result -> fetch ( PDO :: FETCH_ASSOC );
$ result = null ;
หมุนสิ่งนี้
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc()) {
$ids[] = $row['id'];
$names[] = $row['name'];
$ages[] = $row['age'];
}
var_export($ages);
$stmt->close();
ลงในนี้
$products=$dao
->select("*")
->from("myTable")
->where("name = ?",[$_POST['name']])
->toList();
เพิ่มข้อกำหนดถัดไปลงใน composer.json จากนั้นอัปเดตผู้แต่ง
{
"require" : {
"eftec/ DaoOne " : " ^3.15 "
}
}
หรือติดตั้งผ่าน cli โดยใช้
ผู้แต่งต้องการ eftec/ DaoOne
เพียงดาวน์โหลดไฟล์ lib/ DaoOne .php แล้วบันทึกลงในโฟลเดอร์
$ dao = new DaoOne ( " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ dao -> connect ();
ที่ไหน
$ sql = " CREATE TABLE `product` (
`idproduct` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`idproduct`)); " ;
$ dao -> runRawQuery ( $ sql );
$ sql = " insert into `product`(name) values(?) " ;
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Cocacola " ;
$ stmt -> bind_param ( " s " , $ productName ); // s stand for string. Also i =integer, d = double and b=blob
$ dao -> runQuery ( $ stmt );
หมายเหตุ: คุณสามารถแทรกโดยใช้การแทรกลูกโซ่ขั้นตอน($table,$schema,[$values])
$ dao -> runRawQuery ( ' insert into `product` (name) values(?) '
, array ( ' s ' , ' cocacola ' ));
มันจะส่งคืน mysqli_statement
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
while ( $ row = $ rows -> fetch_assoc ()) {
var_dump ( $ row );
}
คำสั่งนี้ต้องได้รับการประมวลผลด้วยตนเอง
มันจะส่งกลับอาร์เรย์ที่เชื่อมโยง
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
$ allRows = $ rows -> fetch_all ( MYSQLI_ASSOC );
var_dump ( $ allRows );
try {
$ sql = " insert into `product`(name) values(?) " ;
$ dao -> startTransaction ();
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Fanta " ;
$ stmt -> bind_param ( " s " , $ productName );
$ dao -> runQuery ( $ stmt );
$ dao -> commit (); // transaction ok
} catch ( Exception $ e ) {
$ dao -> rollback ( false ); // error, transaction cancelled.
}
มันเริ่มการทำธุรกรรม
มันทำธุรกรรม
มันย้อนกลับการทำธุรกรรม
หากเป็นจริง (ค่าเริ่มต้น) จะแสดงข้อผิดพลาดหากเกิดข้อผิดพลาด หากเป็นเท็จ การดำเนินการจะดำเนินต่อไป
เป็นจริงหากเชื่อมต่อฐานข้อมูล มิฉะนั้นจะเป็นเท็จ
คุณยังสามารถสร้างแบบสอบถามตามขั้นตอนได้อีกด้วย
ตัวอย่าง:
$ results = $ dao -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' s ' , ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ ' i ' , 1 ])
-> toList ();
สร้างคำสั่งเลือก
$ results = $ dao -> select ( " col1,col2 " )->. . .
สร้างแบบสอบถาม: เลือก col1,col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
สร้างแบบสอบถาม: เลือก * จากตาราง ....
สร้างคำสั่งเลือก
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
สร้างแบบสอบถาม: เลือก col1,col2 ที่แตกต่างกัน ....
หมายเหตุ: ->distinct('unique') ส่งคืน select Unique ..
สร้างคำสั่งจาก
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
สร้างแบบสอบถาม: เลือก * จากตาราง
$tables อาจเป็นตารางเดี่ยวหรือโครงสร้าง sql ตัวอย่างเช่น คำสั่งถัดไปถูกต้อง:
$ results = $ dao -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ). . .
สร้างคำสั่งwhere
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ). . .
สร้างแบบสอบถาม: เลือก * จากตาราง โดยที่ p1=1
หมายเหตุ: ArrayParameters เป็นอาร์เรย์ดังนี้ type,value
โดยที่ type คือ i=integer, d=double, s=string หรือ b=blob หากมีข้อสงสัยให้ใช้ "s"
ตัวอย่างของ arrayParameters:
['i',1 ,'s','สวัสดี' ,'d',20.3 ,'s','โลก']
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ]). . .
สร้างแบบสอบถาม: เลือก * จากตาราง โดยที่ p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
สร้างแบบสอบถาม: เลือก * จากตาราง โดยที่ p1=?(1) และ p2=?('hello')
บันทึก. ที่จะซ้อนกันได้
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
สร้างแบบสอบถาม: เลือก * จากตาราง โดยที่ p1=?(1) และ p2=?('hello')
คุณยังสามารถใช้:
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
สร้างแบบสอบถาม: เลือก * จากตาราง โดยที่ p1=?(Coca-Cola) และ p2=?(1)
สร้างคำสั่งสั่งซื้อ
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
สร้างแบบสอบถาม: เลือก * จาก ลำดับตารางตาม p1 desc
สร้างคำสั่งกลุ่ม
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
สร้างแบบสอบถาม: เลือก * จาก กลุ่มตารางโดย p1
สร้างคำสั่งกลุ่ม
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
สร้างแบบสอบถาม: เลือก * จากกลุ่มตารางโดย p1 มี p1>?(1)
หมายเหตุ: การมีสามารถซ้อนกันได้มี()->มี()
หมายเหตุ: การมีอาจเป็นได้โดยไม่มีพารามิเตอร์ที่มี ('col>10')
เรียกใช้แบบสอบถามสร้าง
โปรดทราบว่าหาก returnArray เป็นจริง ก็จะส่งกลับอาร์เรย์ที่เชื่อมโยง หาก returnArray เป็นเท็จ ก็จะส่งคืน mysqli_result
หมายเหตุ: จะรีเซ็ตพารามิเตอร์ปัจจุบัน (เช่น การเลือกปัจจุบัน จาก ที่ไหน ฯลฯ)
มันเป็นมาโครของ runGen มันจะส่งกลับอาร์เรย์ที่เชื่อมโยงหรือเป็นโมฆะ
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
มันเป็นมาโครของ runGen มันส่งกลับ mysqli_result หรือ null
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
มันเป็นมาโครของ runGen โดยจะส่งกลับแถวแรก (ถ้ามี ถ้าไม่มี ก็จะส่งกลับค่าเท็จ) เป็นอาร์เรย์ที่เชื่อมโยง
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
มันเป็นมาโครของ runGen โดยจะส่งกลับแถวสุดท้าย (ถ้ามี ถ้าไม่มี ก็จะส่งกลับค่าเท็จ) เป็นอาร์เรย์ที่เชื่อมโยง
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
บางครั้งการรัน order() และ first() จะมีประสิทธิภาพมากกว่า เพราะ Last() อ่านค่าทั้งหมด
มันส่งคืนคำสั่ง sql
$ sql = $ dao -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ dao -> toList (); // executes the query
หมายเหตุ: มันไม่ได้รีเซ็ตแบบสอบถาม
มีสี่วิธีในการดำเนินการแต่ละคำสั่ง
สมมติว่าเราต้องการเพิ่ม จำนวนเต็ม ในคอลัมน์ col1 ด้วยค่า 20
สคีมาและค่าที่ใช้รายการค่า : โดยที่ค่าแรกคือคอลัมน์ ค่าที่สองคือประเภทของค่า (i=integer,d=double,s=string,b=blob) และอาร์เรย์ที่สองมีค่าต่างๆ
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
สคีมาและค่าในรายการเดียวกัน : โดยที่ค่าแรกคือคอลัมน์ ค่าที่สองคือประเภทของค่า (i=integer,d=double,s=string,b=blob) และค่าที่สามคือค่า
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
สคีมาและค่าโดยใช้อาร์เรย์เชื่อมโยงสองตัว :
$ dao -> insert ( " table "
,[ ' col1 ' => ' i ' ]
,[ ' col1 ' => 20 ]);
สคีมาและค่าโดยใช้อาร์เรย์เชื่อมโยงเดี่ยว : ประเภทจะถูกคำนวณโดยอัตโนมัติ
$ dao -> insert ( " table "
,[ ' col1 ' => 20 ]);
สร้างคำสั่งแทรก
$ dao -> insert ( " producttype "
,[ ' idproducttype ' , ' i ' , ' name ' , ' s ' , ' type ' , ' i ' ]
,[ 1 , ' cocacola ' , 1 ]);
การใช้ห่วงโซ่ที่ซ้อนกัน (อาร์เรย์เดียว)
$ dao -> from ( " producttype " )
-> set ([ ' idproducttype ' , ' i ' , 0 , ' name ' , ' s ' , ' Pepsi ' , ' type ' , ' i ' , 1 ])
-> insert ();
การใช้ลูกโซ่ซ้อนกันหลายชุด
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' ,[ ' s ' , ' Pepsi ' ])
-> set ( ' type=? ' ,[ ' i ' , 1 ])
-> insert ();
หรือ (ประเภทถูกกำหนดโดยอัตโนมัติโดย MySql)
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert ();
การใช้ชุดประกาศลูกโซ่ที่ซ้อนกัน
$ dao -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ ' i ' , 100 , ' s ' , ' Pepsi ' , ' i ' , 1 ])
-> insert ();
สร้างแบบสอบถาม: แทรกลงใน productype(idproducttype,name,type) ค่า (?,?,?) ....
สร้างคำสั่งแทรก
$ dao -> update ( " producttype "
,[ ' name ' , ' s ' , ' type ' , ' i ' ] //set
,[ 6 , ' Captain-Crunch ' , 2 ] //set
,[ ' idproducttype ' , ' i ' ] // where
,[ 6 ]); // where
$ dao -> update ( " producttype "
,[ ' name ' => ' Captain-Crunch ' , ' type ' => 2 ] // set
,[ ' idproducttype ' => 6 ]); // where
$ dao -> from ( " producttype " )
-> set ( " name=? " ,[ ' s ' , ' Captain-Crunch ' ]) //set
-> set ( " type=? " ,[ ' i ' , 6 ]) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
หรือ
$ dao -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
สร้างแบบสอบถาม: อัพเดต producttype set
name
=?,type
=? โดยที่idproducttype
=? -
สร้างคำสั่งลบ
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
สร้างแบบสอบถาม: ลบออกจาก producttype โดยที่
idproducttype
=? -
คุณสามารถลบผ่านเชนตัวสร้าง DQL ได้เช่นกัน
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
สร้างแบบสอบถาม: ลบออกจาก producttype โดยที่
idproducttype
=? -
ลำดับเป็นทางเลือกแทนฟิลด์ AUTO_NUMERIC ใช้ตารางเพื่อสร้าง ID ที่ไม่ซ้ำกัน
ลำดับที่ใช้จะขึ้นอยู่กับ Snowflake ของ Twitter และสร้างขึ้นตามเวลา (โดยมีหน่วยเป็นไมโครวินาที) Node Id และลำดับ สิ่งนี้จะสร้างค่า LONG (int 64) ที่ไม่ซ้ำใคร
$dao->nodeId=1; // optional
$dao->tableSequence='snowflake'; // optional
$dao->createSequence(); // it creates a table called snowflake and a function called next_snowflake()
$dao->getSequence() // string(19) "3639032938181434317"
$dao->getSequence(true) // returns a sequence by flipping some values.
$dao->getSequencePHP([unpredictable=false]) ส่งกลับลำดับโดยไม่ต้องใช้ตาราง ลำดับนี้มีประสิทธิภาพมากกว่า $dao->getSequence แต่ใช้ค่าสุ่มเพื่อจัดการกับการชนกัน
หากคาดเดาได้เป็นจริง ก็จะส่งกลับตัวเลขที่คาดเดาไม่ได้ (จะพลิกตัวเลขบางหลัก)
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"