DaoOne . Mysqli의 간단한 래퍼입니다.
이 라이브러리는 가능한 한 빠릅니다. 대부분의 작업은 간단한 문자열/배열 관리입니다.
참고: 이 릴리스는 https://github.com/EFTEC/PdoOne으로 이동되었습니다.
PdoOne은 동일한 작업을 수행하지만 (MySQLi 대신) PDO 라이브러리와 함께 작동합니다. 현재 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();
작곡가.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 );
참고: 절차적 체인 insert($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.
}
거래가 시작됩니다
트랜잭션을 커밋합니다.
트랜잭션을 롤백합니다.
true(기본값)인 경우 오류가 발생하면 오류가 발생합니다. false이면 실행이 계속됩니다.
데이터베이스가 연결되어 있으면 true이고, 그렇지 않으면 false입니다.
절차적 쿼리를 작성할 수도 있습니다.
예:
$ 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 " )->. . .
쿼리를 생성합니다: select * from table ....
선택 명령을 생성합니다.
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
쿼리를 생성합니다: 서로 다른 col1,col2 ...를 선택하세요.
참고: ->distinct('unique')는 select Unique를 반환합니다.
from 명령을 생성합니다.
$ 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는 유형, 값과 같은 배열입니다.
여기서 유형은 i=integer, d=double, s=string 또는 b=blob입니다. 의심스러운 경우 "s"를 사용하세요.
arrayParameters의 예:
['i',1 ,'s','hello' ,'d',20.3 ,'s','world']
$ 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')인 테이블에서 select *를 생성합니다.
메모. 어디에 중첩될 수 있는지.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
쿼리를 생성합니다. p1=?(1) 및 p2=?('hello')인 테이블에서 select *를 생성합니다.
다음을 사용할 수도 있습니다.
$ 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 ' ). . .
쿼리를 생성합니다: select * from table order by p1 desc
그룹 명령을 생성합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
쿼리를 생성합니다: p1을 기준으로 테이블 그룹 에서 * 선택
그룹 명령을 생성합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
쿼리를 생성합니다: p1>?(1)을 갖는 p1에 의해 테이블 그룹에서 *를 선택합니다.
참고: Have는 중첩된 have()->having()일 수 있습니다.
참고: 갖는 것은 매개변수 없이도 가질 수 있습니다. have('col>10')
쿼리 생성을 실행합니다.
returnArray가 true이면 연관 배열을 반환합니다. returnArray가 false이면 mysqli_result를 반환합니다.
참고: 현재 매개변수(예: 현재 선택, 원본, 위치 등)를 재설정합니다.
runGen의 매크로입니다. 연관 배열 또는 null을 반환합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
runGen의 매크로입니다. mysqli_result 또는 null을 반환합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
runGen의 매크로입니다. 첫 번째 행(있는 경우 false를 반환)을 연관 배열로 반환합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
runGen의 매크로입니다. 마지막 행(있는 경우 false를 반환)을 연관 배열로 반환합니다.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
last()가 모든 값을 읽기 때문에 order() 및 first()를 실행하는 것이 더 효율적인 경우도 있습니다.
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 ();
쿼리를 생성합니다. producttype(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
쿼리를 생성합니다: 제품 유형 세트
name
업데이트 =?,type
=? 여기서idproducttype
=? ....
삭제 명령을 생성합니다.
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
쿼리를 생성합니다.
idproducttype
=? producttype에서 삭제하세요. ....
DQL 빌더 체인을 통해 삭제할 수도 있습니다.
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
쿼리를 생성합니다.
idproducttype
=? producttype에서 삭제하세요. ....
시퀀스는 AUTO_NUMERIC 필드의 대안입니다. 테이블을 사용하여 고유 ID를 생성합니다.
사용된 시퀀스는 Twitter의 Snowflake를 기반으로 하며 시간(마이크로초 단위), 노드 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보다 효율적이지만 충돌을 처리하기 위해 임의의 값을 사용합니다.
upredictable이 true이면 예측할 수 없는 숫자를 반환합니다(일부 숫자를 뒤집음).
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"