2012-12-03 4 views
1

Salut salut je convertis mon code MySQL à MySQLi parce que c'est plus sûr, mais AFAIK MySQLi n'est pas plus sûr par lui-même.mysql à mysqli convertion

J'ai utilisé le convertisseur dans la réponse choisie ce sujet: Updating from MYSQL to MYSQLI

et le code fonctionne, mais maintenant je ne sais pas exactement quoi faire, je sais que je dois préparer les querys mais exactement où et comment se préparer je ne sais pas ...

Par exemple, si j'ai une requête INSERT avec 5 variables php ou plus, est-ce correct? Comment fais-je? tous les exemples que je trouve sont avec une variable ... et dois-je préparer dans la ligne immédiatement avant la requête?

Suis-je trop confus? Je suis désolé si c'est des choses très basiques mais je suis complètement noob avec ceci et tout ce que je veux est quelques directives ...

+1

dont 'upgrade for "security". tout se résume à la capacité et la connaissance du programmeur. L'utilisation de mysqli ou de pdo ne permet pas de faire instantanément quelque chose de "plus sécurisé". mysql peut être parfaitement sécurisé si vous savez ce que vous faites. Au lieu de cela, mettez à niveau vers pdo ou mysqli parce que mysql a été déprécié. –

+0

... et parce que mysql vous oblige à coder sans certaines fonctionnalités de base comme les instructions préparées. –

+1

Ne frappez pas l'OP; Il pose exactement les bonnes questions et veut bien faire les choses. Encourageons ça. En tout cas, il y a des pièges de sécurité dans l'ancienne bibliothèque mysql qui font qu'il est préférable d'éviter, même si vous ne prévoyez pas d'utiliser les nouvelles fonctionnalités comme les requêtes préparées. – SDC

Répondre

4

Voici un exemple d'une requête INSERT avec plusieurs paramètres.

/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("INSERT INTO mytable (field1, field2, field3) VALUES(?, ?, ?)")) { 

    /* bind parameters for markers */ 
    $stmt->bind_param("sss", $field1, $field2, $field3); 

    /* execute query */ 
    $stmt->execute(); 

    /* close statement */ 
    $stmt->close(); 
} 

Comme vous pouvez le voir $field1, $field2 et $field3 seront liés comme des chaînes (note les trois s) et remplacera le ? dans la requête.

Bind param types:

i - variable correspondant est de type entier
d - variables correspondante type à double
s - variable correspondant a chaîne de type
b - variable correspondante est une goutte et sera envoyée en paquets

+0

et si ce n'est pas des ficelles? certains entiers et flottants sont i/f? –

+1

Mis à jour la réponse avec les autres types – MrCode

+0

merci :) donc dans l'autre pour faire toute autre requête est juste comme ça, je remplace les variables comme dans l'exemple, non? le stmt doit être fermé à chaque fois, n'est-ce pas? –