2017-09-27 1 views
0

J'ai cherché sur le web mais pas de chance. Je suis nouveau sur SQLSRV et je migrais de PHP MySQL vers PHP SQL et j'ai du mal à insérer des données depuis un formulaire car certains champs sont optionnels ce qui fait varier le numéro de colonne. J'ai besoin d'aide pour savoir comment je peux insérer quand le numéro de colonne varie. merci comment est ici mon code d'insertion ressemblesqlsrv insérer lorsque les colonnes varient

// sql fields and values for main table 
    $in_fields = array(); 
    $in_values = array(); 

    // prepare insertion 
    foreach ($_POST as $key => $value) { 
     if (!empty($value)) { 
      $value = sql_escape($value); 
      $in_fields[] = "[{$key}]"; 
      $in_values[] = "'{$value}'"; 
     } 
    }  

    // prepare sql stmt 
    if (!empty($in_fields)) { 
     $sql = "INSERT into [table_name]("; 
     $sql .= implode(", ", $in_fields); 
     $sql .= ") VALUES()"; 

     if (executeSql($sql, $in_values)) { 
      $success = "Successfully Added New Record"; 
     } 
    } 

La fonction ExecuteSql ressemble à ceci

function executeSql($sql, $params) { 
    global $conndb; 
    $rs = sqlsrv_query($conndb, $sql, $params)or die("Db query error.<br />".print_r(sqlsrv_errors(), true)); 
    return !$rs ? false : true; 
} 

Répondre

0

Vous devez ajouter des valeurs d'espace réservé (?) dans la VALUES partie de votre requête, vous aura besoin d'un espace réservé pour chaque valeur que vous traversez - c'est-à-dire pour chaque valeur dans $in_values.

Pour ce faire, vous pourriez avoir un autre tableau, qui vient un certain nombre de ? comme valeurs, puis, comme vous l'avez fait pour les champs, implode le tableau dans le VALUES. Comme ceci:

$in_fields = array(); 
$in_values = array(); 
$placeholders = array(); // new array 

foreach ($_POST as $key => $value) { 
    if (!empty($value)) { 
     $value = sql_escape($value); 
     $in_fields[] = "[{$key}]"; 
     $in_values[] = "'{$value}'"; 

     // add a placeholder to the array 
     $placeholders[] = "?"; 
    } 
} 

if (!empty($in_fields)) { 
    $sql = "INSERT into [table_name]("; 
    $sql .= implode(", ", $in_fields); 
    $sql .= ") VALUES (" . implode(",", $placeholders) . ")"; 

    if (executeSql($sql, $in_values)) { 
     $success = "Successfully Added New Record"; 
    } 
}