Je veux avoir une fonction PHP générique qui construit une requête mysql basée sur les paramètres de la fonction. Comme il est générique, la requête peut parfois demander id = 123 ou name = 'Bob'. J'ai testé quelques questions avec des citations autour des chiffres, même des choses comme WHERE id > '50' + 7
et cela a fonctionné, mais j'ai des doutes que cela ne causera pas de problèmes sur la route. Je suppose que si c'est vraiment une fonction polyvalente, elle devrait être capable de gérer les dates et d'autres types de données. Alors, quelle serait la meilleure façon de former ces requêtes en toute sécurité?MySQL/PHP - Est-ce que le fait de placer des guillemets autour de nombres casse les requêtes?
Répondre
Les valeurs autour des valeurs sont correctes pour tout type tant que votre requête reste sur mySQL. La façon dont les valeurs seront traitées dépendra du type de champ comparé. Si nécessaire, ils seront automatiquement convertis. En outre, vous pouvez vouloir regarder dans des enveloppeurs de base de données qui offrent des instructions préparées comme PDO. Mis à part d'autres avantages, ils se chargeront eux-mêmes de la citation - et de l'échappement des données entrantes.
Un exemple de la manual:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>
Les guillemets ne pas nuire à tout type de données. Parce que, le moteur mysql le convertira en type de données des colonnes correspondantes.
Les guillemets vides dans les insertions mysql agissent comme s'ils étaient interprétés comme une valeur de chaîne.
Si vous utilisez une fonction de génération d'un insert pour une colonne mysql INT et retrouvez avec
IntColumn = ''
vous pourriez obtenir une erreur de type.
ERROR 1366: 1366: valeur entière incorrect: « » pour la colonne « intColumn » à la ligne 1
Vous voudrez filtrer les colonnes INT fixer une valeur vide ou mis unquoted nulle à la place de la citations vides.
IntColumn = null
OK merci, je pensais que les guillemets où seulement pour les chaînes. J'ai appris quelque chose de nouveau. – Moss