Le coût d'utilisation de prepare et query est-il le même pour la même instruction de requête SQL ?
$sql = $pdo -> préparer("sélectionner * dans la table");
$sql -> exécuter();
$rs = $sql ->
$rs = $go -> fetch(PDO :: FETCH_ASSOC);
Par exemple, les requêtes de préparation et de requête ci-dessus sont-elles également efficaces ? (Ignorer l'injection d'instructions SQL).
Single Lequel est-il préférable d'utiliser pour les résultats de requête ? Préparera-t-il l'envoi de la base de données au moins deux fois à la base de données lors de l'interrogation ?
1.PDO::query exécute une instruction SQL et, si elle est passée, renvoie un objet PDOStatement. La fonction PDO::query a une "très bonne chose", c'est-à-dire qu'elle peut parcourir directement le jeu d'enregistrements renvoyé.
2.PDO::exec exécute une instruction SQL et renvoie le nombre de lignes affectées. Cette fonction ne renvoie pas de collection de résultats. Recommandation officielle :
Pour les instructions SELECT qui ne doivent être émises qu'une seule fois dans le programme, pensez à utiliser PDO::query().
Pour les instructions qui doivent être émises plusieurs fois, vous pouvez utiliser PDO::prepare() pour préparer un objet PDOStatement et utiliser PDOStatement::execute() pour émettre l'instruction.
PDO::exec prend en charge l'exécution de toutes les instructions SQL telles que SELECT/DELETE/UPDATE/INSERT, elle est donc beaucoup plus puissante que la fonction PDO query(). Étant donné que seules les fonctions affectées sont renvoyées, si vous exécutez SELECT, vous ne pouvez pas obtenir l'objet PDOStatement, vous ne pouvez donc pas parcourir l'ensemble de résultats. Vous ne pouvez utiliser la requête ou exécuter la fonction que conformément aux recommandations officielles. .
3. Le principe de préparation est le suivant. Envoyez l'instruction sql au serveur SQL pour compilation à l'avance, puis exécutez-la lorsque exec est exécuté. Compilez une fois, exécutez plusieurs fois. S'il n'y a qu'une seule requête, l'efficacité de la préparation et de la requête est fondamentalement la même. S'il est exécuté plusieurs fois, l'efficacité de la préparation sera révélée. De plus, toutes les injections SQL ne peuvent pas être empêchées, comme par exemple "where in (" ").