Maison  >  Article  >  cadre php  >  ThinkPHP5.1 : utilisation d'une requête d'objet tableau

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

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼avant
2019-12-16 16:04:123996parcourir

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;

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,
];

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

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

, le SQL généré est :

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

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();

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%'

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();

pour générer du SQL :

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer