2013-08-19 73 views
0

我有我要執行這個語句中,我想包括一個for循環來定義數據將被輸入到等PHP - for語句中的字符串

代碼列一個MySQL聲明我現在有被

$stmt = $conn->prepare('INSERT into DATA ('. 
    for($i = 0; $i < count($columns); $i++) { 
     echo $columns[$i]; 
    } 
    .') VALUES ('. 
    for($i = 0; $i < count($columns); $i++) { 
     echo ':'.$columns[$i].' , '; 
    } 
    .')'); 

顯然,這並不工作,但如果它是在第二個for語句也上班吧回聲在每個循環的最後一個逗號,這將導致一個錯誤的最後循環,使還有沒有辦法解決這個問題?

在此先感謝!

+1

U可以使用,而不是與循環破滅',' 分隔器。你可以請回聲查詢,並檢查查詢是否正常工作 列中,您可能正在打印值而不是列名稱..只是「回聲$我;」使用foreach – Priya

+0

使新變量$ prepare =「INSERT INTO data(」;然後在for循環中將你的數據添加到taht變量中 – DeiForm

+0

你可以使用'implode'函數 – Bora

回答

1

使用implode另一種方法:

$sql = "INSERT into DATA (`" . implode('`,`', $columns) . "`) values (:" . implode(',:', $columns) . ")" 
$stmt = $conn->prepare($sql); 

結果舉例:

// Input array 
$columns = array('A', 'B', 'C'); 

// Output 
INSERT into DATA(`A`,`B`,`C`) values (:A,:B,:C) 
3

使用join/implode功能:

$params = array_map(function($var){return ':'.$var;}, $columns); 
$sql = 'INSERT into DATA ('.join(',', $columns).') VALUES ('.join(',', $params).')';  
$stmt = $conn->prepare($sql); 
0

您應該創建查詢外的準備()函數的,使其更容易。

類似的東西會更好/更清晰:

$count = count ($columns); // Avoid using count in your loop init (Performances) 
$query = 'INSERT INTO DATA (' . 
for($i = 0; $i < $count; $i++) { 
    $query .= $columns[$i]; 
} 
$query .= ') VALUES ('; 
for($i = 0; $i < $count; $i++) { 
    if ($i != $count - 1) $query.= ':'.$columns[$i].' , '; 
    else $query .= ':'.$columns[$i]; // No coma for the last value 
} 
$query .= ')'; 
$stmt = $conn->prepare($query);