DaoOne . Es ist ein einfacher Wrapper für Mysqli
Diese Bibliothek ist so schnell wie möglich. Bei den meisten Vorgängen handelt es sich um einfache String-/Array-Verwaltungen.
Hinweis: Diese Version wurde nach https://github.com/EFTEC/PdoOne verschoben
PdoOne erledigt die gleiche Aufgabe, funktioniert jedoch mit der PDO-Bibliothek (anstelle von MySQLi). Im Moment funktioniert PdoOne mit Mysqli und SqlSrv, verfügt aber über viele andere Funktionen, die auf DaoOne nicht vorhanden sind
Über Composer installieren
Komponist benötigt eftec/pdoone
Diese Bibliothek könnte mit eftec/ DaoOne zusammenarbeiten.
Ändern Sie die Klasse, anstatt eftec/ DaoOne -> eftec/pdoone zu verwenden
Beispiel:
Vor:
/** @var eftec DaoOne $db */
$ db = null ;
Nach:
/** @var eftecPdoOne $db */
$ db = null ;
Vor:
$ db = new DaoOne ( ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
Nach:
$ db = new DaoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' ); // check 'mysql'
Wenn wir DaoOne ::runGen(false) verwenden, müssen wir das Ergebnis überprüfen. runGen ( DaoOne ) gibt ein mysqli_result-Objekt zurück. runGen (PdoOne) gibt ein pdostatement-Objekt zurück.
Vor:
$ result = $ db -> runGen ( false ); // it returns a mysqli_result
$ result -> fetch_assoc ();
$ result -> free_result ();
Nach:
$ result = $ db -> runGen ( false ); // it returns a pdostatement
$ result -> fetch ( PDO :: FETCH_ASSOC );
$ result = null ;
Drehen Sie dies um
$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();
hinein
$products=$dao
->select("*")
->from("myTable")
->where("name = ?",[$_POST['name']])
->toList();
Fügen Sie zu „composer.json“ die nächste Anforderung hinzu und aktualisieren Sie dann „Composer“.
{
"require" : {
"eftec/ DaoOne " : " ^3.15 "
}
}
oder installieren Sie es über CLI mit
Composer benötigen eftec/ DaoOne
Laden Sie einfach die Datei lib/ DaoOne .php herunter und speichern Sie sie in einem Ordner.
$ dao = new DaoOne ( " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ dao -> connect ();
Wo
$ 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 );
Hinweis: Sie können auch mithilfe einer prozeduralen Kette insert($table,$schema,[$values]) einfügen.
$ dao -> runRawQuery ( ' insert into `product` (name) values(?) '
, array ( ' s ' , ' cocacola ' ));
Es gibt eine mysqli_statement zurück.
$ 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 );
}
Diese Anweisung muss manuell verarbeitet werden.
Es gibt ein assoziatives Array zurück.
$ 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.
}
Es startet eine Transaktion
Es führt eine Transaktion durch.
Es führt ein Rollback einer Transaktion durch.
Wenn true (Standard), wird ein Fehler ausgegeben, wenn ein Fehler auftritt. Bei „false“ wird die Ausführung fortgesetzt
Es ist wahr, wenn die Datenbank andernfalls verbunden ist, es ist falsch.
Sie könnten auch eine prozedurale Abfrage erstellen.
Beispiel:
$ results = $ dao -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' s ' , ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ ' i ' , 1 ])
-> toList ();
Erzeugt einen Auswahlbefehl.
$ results = $ dao -> select ( " col1,col2 " )->. . .
Erzeugt die Abfrage: select col1,col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
Erzeugt die Abfrage: select * from table ....
Erzeugt einen Auswahlbefehl.
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
Erzeugt die Abfrage: Wählen Sie eindeutige Spalte 1, Spalte 2 ... aus.
Hinweis: ->distinct('unique') gibt select unique zurück ..
Erzeugt einen From-Befehl.
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
Erzeugt die Abfrage: * aus Tabelle auswählen
$tables können eine einzelne Tabelle oder eine SQL-Konstruktion sein. Beispielsweise ist der nächste Befehl gültig:
$ results = $ dao -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ). . .
Erzeugt einen Where-Befehl.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ). . .
Erzeugt die Abfrage: select * from table where p1=1
Hinweis: ArrayParameters ist ein Array wie folgt: Typ, Wert.
Wobei der Typ i=integer, d=double, s=string oder b=blob ist. Im Zweifelsfall „s“ verwenden
Beispiel für ArrayParameter:
['i',1 ,'s','hello' ,'d',20.3 ,'s','world']
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ]). . .
Erzeugt die Abfrage: select * from table where p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
Erzeugt die Abfrage: select * from table where p1=?(1) and p2=?('hello')
Notiz. wo könnte verschachtelt werden.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
Erzeugt die Abfrage: select * from table where p1=?(1) and p2=?('hello')
Sie könnten auch Folgendes verwenden:
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
Erzeugt die Abfrage: select * from table where p1=?(Coca-Cola) and p2=?(1)
Erzeugt einen Bestellbefehl.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
Erzeugt die Abfrage: select * from table order by p1 desc
Erzeugt einen Gruppenbefehl.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
Erzeugt die Abfrage: select * from table group by p1
Erzeugt einen Gruppenbefehl.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
Erzeugt die Abfrage: select * from table group by p1 with p1>?(1)
Hinweis: „Having“ kann in „having()->having()“ verschachtelt sein.
Hinweis: „Having“ könnte ohne Parameter sein, „having('col>10')“
Führen Sie die Abfragegenerierung aus.
Beachten Sie, dass, wenn returnArray wahr ist, ein assoziatives Array zurückgegeben wird. Wenn returnArray false ist, wird ein mysqli_result zurückgegeben
Hinweis: Es setzt die aktuellen Parameter zurück (z. B. aktuelle Auswahl, von, wo usw.).
Es ist ein Makro von runGen. Es gibt ein assoziatives Array oder Null zurück.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
Es ist ein Makro von runGen. Es gibt ein mysqli_result oder null zurück.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
Es ist ein Makro von runGen. Es gibt die erste Zeile (falls vorhanden, wenn nicht, gibt es false zurück) als assoziatives Array zurück.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
Es ist ein Makro von runGen. Es gibt die letzte Zeile (falls vorhanden, wenn nicht, gibt es false zurück) als assoziatives Array zurück.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
Manchmal ist es effizienter, order() und first() auszuführen, da last() alle Werte liest.
Es gibt den SQL-Befehl zurück.
$ sql = $ dao -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ dao -> toList (); // executes the query
Hinweis: Die Abfrage wird dadurch nicht zurückgesetzt.
Es gibt vier Möglichkeiten, jeden Befehl auszuführen.
Nehmen wir an, wir möchten in der Spalte col1 eine Ganzzahl mit dem Wert 20 hinzufügen
Schema und Werte unter Verwendung einer Werteliste : Dabei ist der erste Wert die Spalte, der zweite der Werttyp (i=integer,d=double,s=string,b=blob) und das zweite Array die Werte enthält.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
Schema und Werte in derselben Liste : Dabei ist der erste Wert die Spalte, der zweite der Werttyp (i=integer,d=double,s=string,b=blob) und der dritte der Wert.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
Schema und Werte mit zwei assoziativen Arrays :
$ dao -> insert ( " table "
,[ ' col1 ' => ' i ' ]
,[ ' col1 ' => 20 ]);
Schema und Werte unter Verwendung eines einzelnen assoziativen Arrays : Der Typ wird automatisch berechnet.
$ dao -> insert ( " table "
,[ ' col1 ' => 20 ]);
Erzeugt einen Einfügebefehl.
$ dao -> insert ( " producttype "
,[ ' idproducttype ' , ' i ' , ' name ' , ' s ' , ' type ' , ' i ' ]
,[ 1 , ' cocacola ' , 1 ]);
Verwendung einer verschachtelten Kette (einzelnes Array)
$ dao -> from ( " producttype " )
-> set ([ ' idproducttype ' , ' i ' , 0 , ' name ' , ' s ' , ' Pepsi ' , ' type ' , ' i ' , 1 ])
-> insert ();
Verwendung eines verschachtelten Ketten-Mehrfachsatzes
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' ,[ ' s ' , ' Pepsi ' ])
-> set ( ' type=? ' ,[ ' i ' , 1 ])
-> insert ();
oder (der Typ wird möglichst automatisch von MySql definiert)
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert ();
Verwendung eines deklarativen Satzes mit verschachtelter Kette
$ dao -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ ' i ' , 100 , ' s ' , ' Pepsi ' , ' i ' , 1 ])
-> insert ();
Erzeugt die Abfrage: insert into producttype(idproducttype,name,type) Values(?,?,?) ....
Erzeugt einen Einfügebefehl.
$ 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
oder
$ dao -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
Erzeugt die Abfrage: update producttype set
name
=?,type
=? woidproducttype
=? ....
Erzeugt einen Löschbefehl.
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
Erzeugt die Abfrage: Aus Produkttyp löschen, wobei
idproducttype
=? ....
Sie können auch über eine DQL-Builder-Kette löschen.
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
Erzeugt die Abfrage: Aus Produkttyp löschen, wobei
idproducttype
=? ....
Die Reihenfolge ist eine Alternative zum Feld AUTO_NUMERIC. Es verwendet eine Tabelle, um eine eindeutige ID zu generieren.
Die verwendete Sequenz basiert auf Twitters Snowflake und wird basierend auf Zeit (mit Mikrosekunden), Knoten-ID und einer Sequenz generiert. Dadurch wird ein LONG-Wert (int 64) generiert, der eindeutig ist
$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]) Gibt eine Sequenz ohne Verwendung einer Tabelle zurück. Diese Sequenz ist effizienter als $dao->getSequence, verwendet jedoch einen Zufallswert, um Kollisionen zu behandeln.
Wenn upredictable wahr ist, wird eine unvorhersehbare Zahl zurückgegeben (einige Ziffern werden vertauscht).
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"