ThinkPHP5.1: Verwendung einer Array-Objektabfrage

爱喝马黛茶的安东尼
Freigeben: 2019-12-16 16:04:12
nach vorne
3956 Leute haben es durchsucht

ThinkPHP5.1: Verwendung einer Array-Objektabfrage

Entwickler, die 5.0 verwendet haben, verlassen sich mehr auf die Array-Abfragemethode von 5.0, aber leider unterscheidet sich die Array-Abfragemethode von 5.1 stark von 5.0, daher höre ich oft, dass sich Entwickler über 5.1 beschweren Array-Abfragen sind nicht einfach zu verwenden.

Erstens wird aus Gründen der Sicherheit und Benutzerfreundlichkeit offiziell nicht empfohlen, Array-Abfragebedingungen zu verwenden. Zweitens wissen Sie möglicherweise nicht, dass Version 5.1 tatsächlich eine neue Array-Objekt-Abfragemethode bereitstellt . Wird verwendet, um die vorherige Array-Bedingung zu ersetzen.

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 diejenigen, die es gewohnt sind Es oder Für Benutzer, die sich stark auf Array-Abfragebedingungen verlassen, können sie die Array-Objektabfrage auswählen. Dieses Objekt schließt die Brücke zwischen der normalen Array-Abfrage und dem Systemabfrageausdruck. Im Vergleich zur vom System empfohlenen Abfrageausdrucksmethode ist jedoch Vorsicht geboten zur Sicherheit von Variablen, um SQL-Injection zu vermeiden.

Um die Array-Objektabfrage zu verwenden, müssen Sie zunächst die Klasse thinkdbWhere einführen. Es gibt im Allgemeinen zwei Möglichkeiten,

use think\db\Where;
Nach dem Login kopieren

Where-Objekte zu verwenden. Die erste ist die einfachste. Sie verwenden immer noch Array-Bedingungen, um Abfragebedingungen wie 5.0 zu definieren, zum Beispiel:

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

Dann tatsächlich verwenden wobei beim Ändern der Methode 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

Wobei das Objekt die ArrayAccess-Schnittstelle implementiert, 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

zum Generieren von SQL verwenden:

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

enclose-Methode stellt die Abfragebedingung dar wird auf beiden Seiten in Klammern gesetzt.

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 möglichen SQL-Injection führen kann.

Die chinesische PHP-Website bietet eine große Anzahl kostenloser ThinkPHP-Einführungs-Tutorials, zum Lernen ist jeder herzlich willkommen!

Dieser Artikel wurde reproduziert von: https://blog.thinkphp.cn/778497

Das obige ist der detaillierte Inhalt vonThinkPHP5.1: Verwendung einer Array-Objektabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:thinkphp.cn
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!