So verwenden Sie ein Array-Abfrageobjekt in thinkphp5.1

藏色散人
Freigeben: 2021-07-09 08:55:02
nach vorne
2123 Leute haben es durchsucht

Entwickler, die 5.0 verwendet haben, verlassen sich in der Regel auf die Array-Abfragemethode von 5.0, aber leider unterscheidet sich die Array-Abfragemethode von 5.1 stark von 5.0, weshalb sich Entwickler häufig darüber beschweren Die Array-Abfrage in 5.1 ist nicht einfach zu verwenden.

Erstens wird die Verwendung von Array-Abfragebedingungen aus Gründen der Sicherheit und Benutzerfreundlichkeit nicht offiziell empfohlen. Zweitens wissen Sie möglicherweise nicht, dass Version 5.1 tatsächlich eine neue Array-Objekt-Abfragemethode bereitstellt, die die vorherige ersetzt . Array-Bedingungen.

Wenn Ihre Version V5.1.21+ ist, können Sie die unten erwähnte Array-Objekt-Abfragemethode ausprobieren. Sie werden auf jeden Fall unerwartete Überraschungen erleben^_^

Für Benutzer, die an Array-Abfragebedingungen gewöhnt sind oder sich stark darauf verlassen, können Sie auswählen Array-Objektabfrage. Dieses Objekt schließt die Brücke zwischen gewöhnlicher Array-Abfrage und Systemabfrageausdruck. Im Vergleich zur vom System empfohlenen Abfrageausdrucksmethode müssen Sie jedoch auf die Sicherheit von Variablen achten, um eine SQL-Injection zu vermeiden.

Um die Array-Objektabfrage zu verwenden, müssen Sie zunächst die Klasse thinkdbWhere einführen.

use think\db\Where;
Nach dem Login kopieren

Es gibt im Allgemeinen zwei Möglichkeiten, Where-Objekte zu verwenden. Die erste ist die einfachste. Sie verwenden weiterhin Array-Bedingungen, um Abfragebedingungen wie 5.0 zu definieren:

$map = [
    'name'   => ['like', 'thinkphp%'],
    'title'  => ['like', '%think%'],
    'id'     => ['>', 10],
    'status' => 1,
];
Nach dem Login kopieren

Wenn Sie dann tatsächlich die Where-Methode verwenden, ändern Sie sie in

Db::name('user')
    ->where(new Where($map))
    ->select();
Nach dem Login kopieren

Das generierte SQL lautet:

SELECT * FROM `think_user` WHERE  `name` LIKE 'thinkphp%' AND `title` LIKE '%think%' AND  `id` > 10  AND `status` =1
Nach dem Login kopieren

Diese Methode lässt sich am einfachsten ändern und entspricht dem Wechsel zur 5.0-Array-Abfragemethode mit einem Klick. Natürlich werden neben Db-Abfragen auch Modellabfragen unterstützt.

Die zweite Möglichkeit besteht darin, ein Where-Objekt direkt zu instanziieren und dann die Where-Objektinstanz direkt zu übergeben, wenn die Where-Methode abgefragt wird.

$where          = new Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];

Db::name('user')
    ->where($where)
    ->select();
Nach dem Login kopieren

Where-Objekt implementiert die ArrayAccess-Schnittstelle, sodass es direkt als Array zugewiesen werden kann.

Das generierte SQL ist:

SELECT * FROM `think_user` WHERE   `id` IN (1,2,3) AND `title` LIKE '%php%'
Nach dem Login kopieren

Mithilfe von Where kann die Objektabfrage mit anderen Abfragemethoden gemischt werden. Wenn Sie beim Mischen von Array-Abfrageobjekten Klammern zu den Abfragebedingungen eines Array-Abfrageobjekts hinzufügen möchten, können Sie

$where          = new Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];

Db::name('user')
    ->where($where->enclose())
    ->where('status', 1)
    ->select();
Nach dem Login kopieren

verwenden. Das generierte SQL lautet:

SELECT * FROM `think_user` WHERE  ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND  `status` =1
Nach dem Login kopieren

enclose-Methode bedeutet, dass die Abfragebedingungen auf beiden in Klammern eingeschlossen werden Seiten.

Wenn Sie Array-Objekte zum Abfragen verwenden, überprüfen Sie bitte unbedingt den Datentyp und vermeiden Sie, dass Benutzer Ihre Daten ermitteln, da dies zu einer SQL-Injection führen kann.
Verwandte Empfehlungen: Die neuesten 10 Thinkphp-Video-Tutorials

Das obige ist der detaillierte Inhalt vonSo verwenden Sie ein Array-Abfrageobjekt in thinkphp5.1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!