2017-07-21 2 views
0

Dans mon expérience avec MySQL, je n'ai jamais été un utilisateur d'instructions préparées (j'étais avant la plupart du temps et seulement fait des requêtes pour les tests). En particulier, j'ai maintenant un site utilisant un formulaire qui met à jour une base de données DB2 avec des connexions ODBC. Je suis nouveau dans ce monde mais je me rends compte que ma requête ci-dessous est vulnérable à l'injection.PHP - SQL Préparé l'instruction dans db2/odbc (empêcher l'injection)

Comment changer cela pour créer une instruction préparée?

$connectionstring = odbc_connect(A4_ODBCLINK, A4_ODBCUSER, A4_ODBCPW); 

    if (!$connectionstring) { 
    die('Could Not Connect:'); 

    } 

    $sql = " UPDATE " . A4F_CUSTMSTFC . " 
     SET XBLZIC ='" .$_POST['zip'] . "' 
     WHERE XCSTNO ='" .$_POST['uname']. "'"; 

    $queryexe = odbc_exec($connectionstring, $sql); 

Répondre

2

Vous devriez être en mesure de faire quelque chose comme ceci:

$sql = " UPDATE " . A4F_CUSTMSTFC . " 
    SET XBLZIC = ? 
    WHERE XCSTNO = ?"; 
$stmt = odbc_prepare($connectionstring, $sql); 
$success = odbc_execute($stmt, array($_POST['zip'], $_POST['uname'])); 

Pour plus, voir http://php.net/manual/en/function.odbc-prepare.php mais, fondamentalement, il suffit de mettre? à la place des variables que vous voulez lier plus tard.

+0

Génial, merci. Cela a plus de sens que je ne le pensais à l'origine! –

+0

Donc, si je veux faire cela avec 2 requêtes, je voudrais juste suivre cela mais utiliser $ sql2, $ stmt2 et $ success2, par exemple? –

+0

Oui. Et la bonne chose est que les instructions ($ stmt) sont réutilisables. Ainsi, la base de données peut optimiser ces requêtes et les réutiliser. – EvanM