DaoOne 。 Mysqli のシンプルなラッパーです
このライブラリは可能な限り高速です。ほとんどの操作は単純な文字列/配列の管理です。
注: このリリースは https://github.com/EFTEC/PdoOne に移動されます
PdoOne も同じ仕事をしますが、(MySQLi ではなく) PDO ライブラリで動作します。現時点では PdoOne は Mysqli と SqlSrv で動作しますが、 DaoOneには存在しない他の多くの機能があります。
Composer 経由でインストールする
作曲家には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に追加し、composerを更新します。
{
"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 " )->. . .
クエリを生成します: select col1,col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
クエリを生成します: select * from table ....
選択コマンドを生成します。
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
クエリを生成します: select uniquecol1 ,col2 ....
注: ->distinct('unique') は、一意の選択を返します。
from コマンドを生成します。
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
クエリを生成します: 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 ' ). . .
クエリを生成します: select * from table where p1=1
注: ArrayParameters は、 type,value のような配列です。
type は 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 ]). . .
クエリを生成します: select * from table where p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
クエリを生成します: select * from table where p1=?(1) and p2=?('hello')
注記。ネストできる場所。
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
クエリを生成します: select * from table where p1=?(1) and p2=?('hello')
次のものも使用できます。
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
クエリを生成します: select * from table where p1=?(Coca-Cola) and p2=?(1)
注文コマンドを生成します。
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
クエリを生成します: select * from table order by p1 desc
グループコマンドを生成します。
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
クエリを生成します: select * from table group by p1
グループコマンドを生成します。
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
クエリを生成します: select * from table group by p1ah p1>?(1)
注: Hasing は、having()->having() をネストすることができます。
注: パラメータを指定しない場合は、having('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
注: クエリはリセットされません。
各コマンドを実行するには 4 つの方法があります。
列col1に値20の整数を追加するとします。
値のリストを使用したスキーマと値: 最初の値は列、2 番目の値は値のタイプ (i=integer,d=double,s=string,b=blob)、2 番目の配列には値が含まれます。
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
同じリスト内のスキーマと値: 最初の値は列、2 番目は値の型 (i=integer,d=double,s=string,b=blob)、3 番目は値です。
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
2 つの連想配列を使用したスキーマと値:
$ 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 ();
クエリを生成します: insert into producttype(idproducttype,name,type) value(?,?,?) ....
挿入コマンドを生成します。
$ 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
クエリを生成します: update producttype set
name
=?,type
=?ここで、idproducttype
=? ....
削除コマンドを生成します。
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
クエリを生成します: delete from producttype where
idproducttype
=? ....
DQL ビルダー チェーンを介して削除することもできます。
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
クエリを生成します: delete from producttype where
idproducttype
=? ....
シーケンスは 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"