2009-11-29 162 views
1

Im卡住了,一直試圖找出現在2個小時。我已經找到了foreach循環,但不知道如何現在插入數據。使用foreach數組插入多行到mysql使用foreach數組

這裏是我的PHP,我做錯了什麼?

$query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES "; 
foreach($_POST as $key => $value) { 
    $query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])"; 
    $result = mysql_query($query, $connection); 
} 

謝謝!

我是否應該這樣佈置,對不起,仍然是一個新手,以及它是如何工作的。

foreach($_POST as $key => $value) { 
    $query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),"; 
    $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])"; 
} 

$result = mysql_query($query, $connection); 

回答

2

幾件事情錯在這裏:

  1. 你錯過了你的價值觀清單上的開口支架(VALUES後)
  2. 您在foreach的每次迭代運行mysql_query。相反,您可能希望先構建字符串(使用多個值列表),然後在循環外部運行mysql_query
  3. 不能將$_POST['project_id']變量插入到字符串中
  4. 在將數據放入數據庫之前,您需要先將其轉義$_POST
  5. 您實際上並未在您的查詢中使用您的foreach中的$key$value,您只是放棄它。
  6. 循環內部的變量($thumb_path等)對於循環—的每次迭代都是相同的,因此您每次都要插入相同的數據。
  7. 循環的邏輯沒有意義。你不知道$_POST是多久,或者它可能是什麼,所以你爲什麼要循環$_POST

一些提示,以幫助您解決這一切:

  1. 檢查您的錯誤日誌。
  2. var_dump在執行查詢以檢查它在語法上和邏輯上是否正確之前,SQL的字符串。

如果您想進一步的幫助,我建議你var_dump什麼是$_POST,嘗試寫一些你認爲應該查詢看起來像,然後張貼都在這裏。那麼也許有人會幫助你從一個走向另一個。

+0

這是應該如何設置? ($ _ POST作爲$ key => $ value){ $ query =「INSERT INTO $ query。=「$ value [thumb_path],$ value [$ image_path],$ value [$ main_image],'$ _POST [project_id'])」; } $ result = mysql_query($ query,$ connection); – jrutter 2009-11-29 22:34:31

0

首先,用mysql_real_esape_string轉義$ _POST [project_id]。

然後,syntax是INSERT INTO表VALUES(...),(...))

0
// escape your input 
$_POST = array_map('addslashes', $_POST); 

// rather than recursively calling mysql_query, you can insert all your rows with one query 
// INSERT INTO table (columns) VALUES (data), (data), (data), ... 
$values = array(); 
foreach($_POST as $key => $value) { 
    $values[] = "('{$_POST['thumb_path']}', '{$_POST['image_path']}', '{$_POST['main_image']}', '{$_POST['project_id']}')"; 
} 
if(sizeof($values)) { 
    $query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ".implode(',', $values); 
    $result = mysql_query($query, $connection); 
} 
+0

感謝您的幫助,這似乎工作,但價值觀沒有被拉出。相反,它將所有內容都作爲「數組」存儲在數據庫中。任何想法如何解決這個問題? – jrutter 2009-11-29 23:05:01

0

,我覺得這樣的事情要容易得多維護比重複字符串連接,你正在做的:

$values = array(); 
foreach ($_POST as $key => $value) { 
    $qvalue = mysql_real_escape_string($value); 
    $values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value 
} 

$query_values = implode(',', $values); 

$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values"; 
$result = mysql_query($query, $connection); 

請記住,建立這樣的查詢時,它完全可能會建立一個足夠大的查詢,除了max_packet長度,在這種情況下,您必須將插入分割爲多個較小的查詢。