2012-09-28 41 views
0

我需要將以下數組插入到具有列名稱,標題,url,徽標的mysql表中。我創建了表並編寫了一個查詢來傳輸數組。但它是插入陣列的最後一行,留下剩餘... plz幫助我... 這是我的數組將關聯數組插入到mysql表中

$con = mysql_connect("localhost","",""); 

if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("media", $con); 

$featured = array(); 

$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 



$sql = "INSERT INTO featured"; 


    $sql .= " (`".implode("`, `", array_keys($featured))."`)"; 


    $sql .= " VALUES ('".implode("', '", $featured)."') "; 


    $result = mysql_query($sql) or die(mysql_error()); 
+0

你的陣列是2D的。你必須在'foreach()'循環中做到這一點。我們假設所有的數組值都已經通過'mysql_real_escape_string()'轉義了_ –

+0

foreach($ featured as $ sql){ $ sql =「INSERT INTO featured」; // implode鍵的特色... $ sql。=「('」.implode(「','」,array_keys($ featured))。「')」; // implode $ featured的值... $ sql。=「VALUES('」.implode(「','」,$ featured)。「')」; //執行查詢... $ result = mysql_query($ sql)或die(mysql_error()); } – user1694724

+0

我已經試過類似的東西,但dint的工作 – user1694724

回答

2

您通過$featured陣列需要循環:

$con = mysql_connect("localhost","",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("media", $con); 
$featured = array(); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

foreach ($featured as $array) { 
    $sql = "INSERT INTO featured"; 
    $sql .= " (`".implode("`, `", array_keys($array))."`)"; 
    $sql .= " VALUES ('".implode("', '", $array)."') "; 
    $result = mysql_query($sql) or die(mysql_error()); 
} 

或按照建議在一個查詢中插入幾條記錄:

$sql = "INSERT INTO featured"; 
$sql .= " (`".implode("`, `", array_keys($featured[0]))."`) VALUES"; // make sure that $featured contains the same number of key=>value pairs 
foreach ($featured as $array) { 
    $sql .= " ('".implode("', '", $array)."'),"; 
} 
$sql = substr($sql,0,-1); // remove last comma 
$result = mysql_query($sql) or die(mysql_error()); 

請在SQL injections上閱讀。

+2

不會對每行運行一個查詢,而是一次插入多行。 – hakre

+0

右 - 初始化循環外部的INSERT INTO(columns ...)VALUES',然後使用循環附加括號值列表'('a','b','c'),('d',' e','f'),...' –

+2

或者使用帶有參數化值的準備好的語句,每次都通過循環得到分配 –

1

可以使用multiple insert查詢作爲INSERT INTO (column1, column2,...) VALUES ('row1a', 'row1b'..), ('row2a', 'row2b'..)...

$featured = array(); 
    $featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
    $featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
    $featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
    $featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

    $sql = "INSERT INTO featured "; 


    $sql .= " (`".implode("`, `", array_keys($featured))."`)"; 
    $sql .= " VALUES "; 


    for($i=0; $i < count($featured); $i++) { 
    $sql .= "('". implode("', '", $featured[$i])."') "; 
    if($i < (count($featured) - 1)) 
     $sql .= ", "; 
    } 

看到它在行動here

0

由於hakra建議你可以使用一個MySQL查詢通過進行以下更改到你的代碼中插入多行:

$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 
$featured[] = array('name' => '', 'title' => '', 'url' => '', 'logo' => ''); 

$sql = "INSERT INTO featured"; 
$sql .= " (`".implode("`, `", array_keys($featured))."`)"; 
$sql .= " VALUES "; // moved parenthetical grouping to foreach loop below 
foreach ($featured as $feature) { 
    $sql .= "('".implode("', '", $featured)."'), "; // note comma after each parenthetical grouping 
} 
$sql = substr($sql, 0, -2); // we'll cut off the last ", " added to the string 

$result = mysql_query($sql) or die(mysql_error()); 
0

這是PDO工作!你應該使用PDO或mysqli而不是mysql_,但這是一個完整的其他討論。

你想要做的是什麼:

// ======================================================== 
// Define insert rows. Note the colon before each key name. 
// That's there because we'll be passing this to a PDOStatement as bound 
// parameters. Depending on the logic of your program there may be different 
// ways you want to handle this. 
// ======================================================== 
$featured = array(); 
$featured[] = array(':name' => '', ':title' => '', ':url' => '', ':logo' => ''); 
$featured[] = array(':name' => '', ':title' => '', ':url' => '', ':logo' => ''); 
$featured[] = array(':name' => '', ':title' => '', ':url' => '', ':logo' => ''); 
$featured[] = array(':name' => '', ':title' => '', ':url' => '', ':logo' => ''); 


// ======================================================== 
// Create the PDO object. Define your query and prepare a statement. I use the 
// INSERT SET syntax rather than the INSERT VALUES syntax purely for readability. 
// Either will work with PDO. Also, most programmers don't set the query_str as a 
// separate variable as I do here. I find it improves readability. 
// ======================================================== 
$db_obj = new PDO (/*connection params go here */); 
$query_str = "INSERT INTO featured SET 
    name = :name, 
    title = :title, 
    url = :url, 
    logo = :logo"; 
$query_obj = $db_obj->query ($query); 


// ======================================================== 
// Loop through your rows in $featured and execute the SQL query, passing the 
// new row of parameters each time. 
// ======================================================== 
foreach ($featured as $row) { 
    $query_obj->execute ($row); 
}