Lier un tableau PHP pour l'insertion SQL
P粉928591383
P粉928591383 2023-08-08 15:51:43
0
1
472

Essayer de lier un tableau (première liaison de tableau) pour empêcher l'injection SQL

Ceci est un code valide :


;

;
if (isset($_POST['checkbox_selected'])) { $valuesArr = tableau(); foreach ($_POST['checkbox_selected'] as $key => $value) { //Récupère l'ID du tableau pour trouver le numéro de ligne de la colonne CSVOption $findrow = array_search_partial($attributeid, $value); //Lorsque le formulaire est soumis, la valeur de l'attribut est affectée à l'identifiant de l'attribut $attribut = $valeur ; $csv = $csvcolonne[$findrow]; $valuesArr[] = "('$userid', '$feed_id', '$attribute', '$csv')"; } $sql = "INSERT INTO map (user_id, feed_id, attribue_id, csvcolumn) valeurs » ; $sql .= implode(',', $valuesArr); mysqli_query($conn,$sql); } 

Je ne parviens pas à lier le tableau, j'ai essayé :

$sql = "INSERT INTO map (user_id, feed_id,attribut_id, csvcolumn) VALUES (?, ?, ? ,?)"; $stmt = $conn->préparer($sql); $stmt->bind_param('iiii', implode(',', $valuesArr)); $stmt->exécuter(); echo imploser(',', $valuesArr) //('1', '1', '13', '9') //Voici le tableau inséré dans SQL //(user_id, feed_id,attribut_id, csvcolumn) //Voici la valeur attribuée dans la première instruction


P粉928591383
P粉928591383

répondre à tous (1)
P粉384679266

Vous avez deux problèmes :

Vous n'utilisez pas la syntaxe de liaison correcte.

Vous avez essayé d'insérer plusieurs lignes dans une seule instruction préparée

if (isset($_POST['checkbox_selected'])) { $sql = "INSERT INTO map (user_id, feed_id, attribute_id, csvcolumn) VALUES (?, ?, ?, ?);"; // prepare only has to happen once $stmt = mysqli_prepare($conn,$sql); mysqli_begin_transaction($conn); try { foreach ($_POST['checkbox_selected'] as $key => $value) { $findrow = array_search_partial($attributeid, $value); $attribute = $value; $csv = $csvcolumn[$findrow]; $stmt->bindParam('iiii', $userid, $feed_id, $attribute, $csv); $stmt->execute(); } mysqli_commit($conn); } catch(mysqli_sql_exception $e) { mysqli_rollback($conn); // immediately roll back changes throw $e; // re-throw exception } }

Le seul léger avantage est que lorsque vous essayez d'envelopper plusieurs VALUES() dans une seule requête, elle sera enveloppée par une transaction implicite. Mais d’autres aspects de cette approche sont désavantageux. En ouvrant explicitement la transaction qui encapsule la boucle de liaison/exécution, vous obtenez les mêmes avantages [annulation d'erreur, traitement par lots d'E/S], tout en profitant également des avantages des instructions préparées [analyse de requête simple, paramétrage, etc.]

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!