Maison > cadre php > PensezPHP > le corps du texte

ThinkPHP5.1 : utilisation d'une requête d'objet tableau

爱喝马黛茶的安东尼
Libérer: 2019-12-16 16:04:12
avant
3956 Les gens l'ont consulté

ThinkPHP5.1 : utilisation d'une requête d'objet tableau

Les développeurs qui ont utilisé la version 5.0 s'appuient davantage sur la méthode de requête de tableau de 5.0, mais malheureusement, la méthode de requête de tableau de 5.1 est très différente de celle de 5.0, j'entends donc souvent les développeurs se plaindre de la version 5.1. la requête tableau n’est pas facile à utiliser.

Tout d'abord, pour des raisons de sécurité et de facilité d'utilisation, il est officiellement déconseillé d'utiliser des conditions de requête de tableau. Deuxièmement, vous ne savez peut-être pas que la version 5.1 fournit en fait une nouvelle méthode de requête d'objet de tableau. . Utilisé pour remplacer la condition de tableau précédente.

Si votre version est V5.1.21+, vous pouvez essayer la méthode de requête d'objet tableau mentionnée ci-dessous, vous aurez certainement des surprises inattendues^_^

Pour ceux qui ont l'habitude de it ou Pour les utilisateurs qui s'appuient fortement sur les conditions de requête de tableau, vous pouvez choisir la requête d'objet de tableau. Cet objet complète le pont entre la requête de tableau ordinaire et l'expression de requête système. Cependant, par rapport à la méthode d'expression de requête recommandée par le système, il faut faire attention. à la sécurité des variables pour éviter l'injection SQL.

Pour utiliser la requête d'objet tableau, vous devez d'abord introduire la classe thinkdbWhere. Il existe généralement deux façons d'utiliser les objets

use think\db\Where;
Copier après la connexion

Where. La première est la plus simple. Vous utilisez toujours des conditions de tableau pour définir des conditions de requête comme 5.0, par exemple :

$map = [
    'name' => ['like', 'thinkphp%'],
    'title' => ['like', '%think%'],
    'id' => ['>', 10],
    'status' => 1,
];
Copier après la connexion

Ensuite, utilisez réellement. où Lors du changement de méthode en

Db::name('user')
    ->where(new Where($map))
    ->select();
Copier après la connexion

, le SQL généré est :

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%think%' AND `id` > 10 AND `status` =1
Copier après la connexion

Cette méthode est la plus simple à modifier et équivaut à passer à la méthode de requête de tableau 5.0 en un seul clic. Bien entendu, en plus des requêtes Db, les requêtes de modèle sont également prises en charge.

La deuxième méthode consiste à instancier directement un objet Where, puis à transmettre directement l'instance de l'objet Where lors de l'interrogation de la méthode Where.

$where = new Where;
$where['id'] = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
    ->where($where)
    ->select();
Copier après la connexion

Où l'objet implémente l'interface ArrayAccess, il peut donc être attribué directement en tant que tableau.

Le SQL généré est :

SELECT * FROM `think_user` WHERE   `id` IN (1,2,3) AND `title` LIKE '%php%'
Copier après la connexion

Utilisation de la requête d'objet Where pouvant être mélangée avec d'autres méthodes de requête. Si vous souhaitez ajouter des parenthèses aux conditions de requête d'un objet de requête de tableau lorsque vous mélangez des objets de requête de tableau, vous pouvez utiliser

$where          = new Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];
Db::name('user')
    ->where($where->enclose())
    ->where('status', 1)
    ->select();
Copier après la connexion

pour générer du SQL :

SELECT * FROM `think_user` WHERE  ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND  `status` =1
Copier après la connexion

la méthode enclose représente la requête. La condition sera mis entre parenthèses des deux côtés.

Lorsque vous utilisez des objets tableau pour interroger, assurez-vous de vérifier le type de données et essayez d'éviter de laisser les utilisateurs déterminer vos données, ce qui peut conduire à la possibilité d'une injection SQL.

Le site Web PHP chinois propose un grand nombre de tutoriels d'introduction ThinkPHP gratuits, tout le monde est invité à apprendre !

Cet article est reproduit à partir de : https://blog.thinkphp.cn/778497

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:thinkphp.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!