2017-09-27 42 views
0

我在網上搜索過,但沒有運氣。 我是SQLSRV的新手,我正在從PHP MySQL遷移到PHP SQL,並且無法從表單插入數據,因爲某些字段是可選的,這使得列號會有所不同。當列號變化時,我需要幫助我如何插入。 謝謝 這裏是我插入的代碼看起來像sqlsrv在列不同時插入

// 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"; 
     } 
    } 

的的ExecuteSQL函數看起來像這樣

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; 
} 

回答

0

您需要在您的查詢的VALUES部分添加佔位符值(?),你將需要一個佔位符爲您通過的每個值 - 即爲$in_values中的每個值。

要做到這一點,你可以有另一個數組,這將只有一個?作爲值,然後,就像你已經做的字段,implode數組到VALUES。像這樣:

$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"; 
    } 
}