Die folgende Tutorial-Kolumne von thinkphp wird Ihnen das Hinzufügen, Löschen, Ändern und Suchen von ThinkPHP-Datenbankoperationen vorstellen. Ich hoffe, dass es Freunden in Not hilfreich sein wird!
Grundlegende Verwendung
Sie können die Datenbank direkt verwenden, um native SQL-Operationen auszuführen, Abfragemethoden (Abfrageoperationen) und Ausführungsmethoden (Schreiboperationen) zu unterstützen und die Parameterbindung zu unterstützen.
Db::query('select * from think_user where id=?',[8]); Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
unterstützt auch die Bindung benannter Platzhalter, zum Beispiel:
Db::query('select * from think_user where id=:id',['id'=>8]); Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
kann mehrere Datenbankverbindungen verwenden,
Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);
config ist eine separate Datenbankkonfiguration, unterstützt Arrays und Zeichenfolgen oder kann die Konfiguration eines Datenbankverbindungsparameternamens sein.
Daten abfragen
Einfache Abfrage
So fragen Sie eine Datenverwendung ab:
// table方法必须指定完整的数据表名 Db::table('think_user')->where('id',1)->find();
Suchmethode-Abfrageergebnis ist nicht vorhanden, geben Sie null zurück
Nutzung des Abfragedatensatzes:
Db::table('think_user')->where('status',1)->select();
Das Abfrageergebnis der Auswahlmethode existiert nicht und gibt ein leeres Array zurück.
Wenn der Datentabellenpräfixparameter festgelegt ist, können Sie
Db::name('user')->where('id',1)->find(); Db::name('user')->where('status',1)->select();
verwenden, wenn Ihre Datentabelle die Tabellenpräfixfunktion nicht verwendet Dann haben die Namens- und Tabellenmethoden den gleichen Effekt.
Alle Kettenbetriebsmethoden können vor den Such- und Auswahlmethoden verwendet werden.
Standardmäßig geben die Such- und Auswahlmethoden Arrays zurück.
Assistentenfunktion
Das System bietet eine Datenbankassistentenfunktion für eine bequemere Abfrage:
db('user')->where('id',1)->find(); db('user')->where('status',1)->select();
Hinweis: Bei Verwendung der Datenbankassistentenfunktion wird bei der Verwendung standardmäßig jedes Mal eine neue Verbindung zur Datenbank hergestellt Db Die Methoden ::name oder Db::table sind Singletons. Wenn die Datenbankfunktion denselben Link verwenden muss, können Sie beispielsweise den dritten Parameter übergeben:
db('user',[],false)->where('id',1)->find(); db('user',[],false)->where('status',1)->select();
Die obige Methode verwendet dieselbe Datenbankverbindung. Der zweite Parameter ist der Verbindungsparameter der Datenbank leer, um die Datenbankkonfiguration zu verwenden.
Verwenden Sie das Abfrageobjekt oder den Abschluss zum Abfragen
oder verwenden Sie das Abfrageobjekt zum Abfragen, zum Beispiel:
$query = new \think\db\Query();$query->table('think_user')->where('status',1); Db::find($query); Db::select($query);
oder verwenden Sie direkt die Abschlussfunktion zum Abfragen, zum Beispiel:
Db::select(function($query){ $query->table('think_user')->where('status',1); });
Wertsummenspaltenabfrage
Um den Wert eines bestimmten Felds abzufragen, können Sie die
// 返回某个字段的值 Db::table('think_user')->where('id',1)->value('name');
-Wertmethode verwenden, um das Ergebnis abzufragen, das nicht vorhanden ist, und null zurückzugeben
Um den Wert von a abzufragen In einer bestimmten Spalte können Sie die Methode
// 返回数组 Db::table('think_user')->where('status',1)->column('name'); // 指定索引 Db::table('think_user')->where('status',1)->column('name','id');
column verwenden, um das Ergebnis abzufragen. Das Ergebnis ist nicht vorhanden. Es wird ein leeres Array zurückgegeben Sie können die Verwendung der Chunk-Methode in Betracht ziehen, die jeweils einen kleinen Teil der Ergebnismenge abruft und dann jeweils einen kleinen Teil der Daten in einen zu verarbeitenden Abschluss einfügt. Diese Methode ist sehr nützlich, wenn Sie schreiben, um eine große Anzahl von Datenbanken zu verarbeiten Aufzeichnungen.
Zum Beispiel können wir alle Benutzertabellendaten in Stapeln verarbeiten und jeweils 100 Benutzerdatensätze verarbeiten:Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { //查询数据 } });// 或者交给回调方法 myUserIterator处理 Db::table('think_user')->chunk(100, 'myUserIterator');
Db::table('think_user')->chunk(100, function($users) { // 处理结果集... return false; });
Db::table('think_user')->where('score','>',80)->chunk(100,function($users) { foreach ($users as $user) { // } });
// 查询JSON类型字段 (info字段为json类型) Db::table('think_user')->where('info$.email','thinkphp@qq.com')->find();
Ein Datenelement hinzufügen
Verwenden Sie die Die Einfügemethode der Db-Klasse übermittelt Daten an die Datenbank Fügt Daten erfolgreich hinzu. Gibt die Anzahl der erfolgreich hinzugefügten Elemente zurück. „Einfügen“ gibt normalerweise 1
zurück
添加数据后如果需要返回新增数据的自增主键,可以使用 getLastInsID 方法:
Db::name('user')->insert($data);$userId = Db::name('user')->getLastInsID();
或者直接使用 insertGetId 方法新增数据并返回主键值:
Db::name('user')->insertGetId($data);
insertGetId 方法添加数据成功返回添加数据的自增主键
添加多条数据
添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可
$data = [ ['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ]; Db::name('user')->insertAll($data);
insertAll 方法添加数据成功返回添加成功的条数
助手函数
// 添加单条数据 db('user')->insert($data); // 添加多条数据 db('user')->insertAll($list);
快捷更新
V5.0.5+ 以上版本封装的快捷更新方法 data ,可以配合 insert 使用。
下面举个例子说明用法:
Db::table('data')->data(['name'=>'tp','score'=>1000])->insert();
更新数据
更新数据表中的数据
Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']);
如果数据中包含主键,可以直接使用:
Db::table('think_user')->update(['name' => 'thinkphp','id'=>1]);
update 方法返回影响数据的条数,没修改任何数据返回 0
如果要更新的数据需要使用 SQL 函数或者其它字段,可以使用下面的方式:
Db::table('think_user')->where('id', 1)->update([ 'login_time' => ['exp','now()'], 'login_times' => ['exp','login_times+1'],]);
更新某个字段的值
Db::table('think_user') ->where('id',1) ->setField('name', 'thinkphp');
setField 方法返回影响数据的条数,没修改任何数据字段返回 0
自增或自减一个字段的值
setInc/setDec 如不加第二个参数,默认值为1
// score 字段加 1 Db::table('think_user') ->where('id', 1) ->setInc('score'); // score 字段加 5 Db::table('think_user') ->where('id', 1) ->setInc('score', 5); // score 字段减 1 Db::table('think_user') ->where('id', 1) ->setDec('score'); // score 字段减 5 Db::table('think_user') ->where('id', 1) ->setDec('score', 5);
延迟更新
setInc/setDec 支持延时更新,如果需要延时更新则传入第三个参数
下例中延时10秒,给 score 字段增加1
Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
setInc/setDec 方法返回影响数据的条数
助手函数
// 更新数据表中的数据 db('user')->where('id',1)->update(['name' => 'thinkphp']); // 更新某个字段的值 db('user')->where('id',1)->setField('name','thinkphp'); // 自增 score 字段 db('user')->where('id', 1)->setInc('score'); // 自减 score 字段 db('user')->where('id', 1)->setDec('score');
快捷更新( V5.0.5+ )
V5.0.5+ 以上版本封装的 data 、 inc 、 dec 和 exp 方法属于链式操作方法,可以配合 update 使 用。
下面举个例子说明用法:
Db::table('data')->where('id',1)->inc('read')->dec('score',3)->exp('name','UPPER(name)')->update();
删除数据
删除数据表中的数据
// 根据主键删除 Db::table('think_user')->delete(1); Db::table('think_user')->delete([1,2,3]); // 条件删除 Db::table('think_user')->where('id',1)->delete(); Db::table('think_user')->where('id','<',10)->delete();
delete 方法返回影响数据的条数,没有删除返回 0
助手函数
// 根据主键删除 db('user')->delete(1); // 条件删除 db('user')->where('id',1)->delete();
Das obige ist der detaillierte Inhalt vonThinkPHP-Datenbankoperationen: Hinzufügen, Löschen, Ändern und Abfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!