Exécuter des requêtes MySQL INSERT à l'aide d'instructions préparées avec PDO
Dans le domaine des objets de données PHP (PDO), des difficultés peuvent survenir lorsque vous tentez de exécuter des requêtes SQL via des instructions préparées. Un problème courant implique l'utilisation de l'instruction INSERT INTO pour ajouter des enregistrements à une base de données.
Considérez le code suivant :
$dbhost = "localhost"; $dbname = "pdo"; $dbusername = "root"; $dbpassword = "845625"; $link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword"); $statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();
Ce code tente d'insérer un nouvel enregistrement dans la table testtable dans un Base de données MySQL. Cependant, la base de données reste vide.
Pour résoudre ce problème, vous devez utiliser des requêtes paramétrées au lieu d'intégrer des valeurs directement dans l'instruction SQL. Les requêtes paramétrées utilisent des espaces réservés (?) ou des paramètres nommés (:parameter) pour représenter les valeurs, qui sont ensuite liées aux valeurs réelles lors de l'exécution. Cette approche empêche les attaques par injection SQL et garantit la validation des données.
La manière correcte d'utiliser les instructions préparées avec INSERT INTO est la suivante :
$dbhost = 'localhost'; $dbname = 'pdo'; $dbusername = 'root'; $dbpassword = '845625'; $link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword); $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);
En utilisant des requêtes paramétrées, vous protégez votre application contre entrée malveillante et assurez l’intégrité de vos données.
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!