2013-06-26 15 views
0

我從表單輸入的文字和圖片如何將兩個數組拼成一個單一字符串以插入mysql值?

正在收集兩個數組
$final = array($info, $paths); 
print_r($final); 

此打印

Array ([0] => Array ([0] => '1995', [1] => 'chevrolet', [2] => 'impala', [3] => '5.7', [4] => 'bose', [5] => '165465', [6] => 'sadfasdf', [7] => '', [8] => '', [9] => 'asdfasdasdf', [10] => '', [11] => '', [12] => 'sdafasdfasd', [13] => '', [14] => '', [15] => '', [16] => '', [17] => 'asdfasdf',) [1] => Array ([0] => 'images/picture22677.png', [1] => 'images/picture22678.png', [2] => 'images/picture22679.jpg',)) 

完美! 但我怎麼現在這個$final數組轉換成這樣

'$value', '$value', '$value', '$value', 

但出數組一個字符串鍵數 更好地瞭解我,我需要一個字符串,我可以finnaly插入MySQL的,像這樣

mysql_query("INSERT INTO 
    auto(year, make, model, engine, sound_system, mileage, att1, att2, 
    att3, att4, att5, att6, att7, att8, att9, att10, att11, att12, att13, att14, att15, picture1, 
    picture2, picture3, picture4, picture5, picture6, picture7, picture8, picture9, 
    picture10, picture11, picture12) 
    VALUES 
    ($finalpaths)); 

看到VALUES ($finalpaths));這裏就是我需要有數組列表轉換爲字符串,將在這種情況下工作

我希望你明白了我所需要的,感謝您的inpu t :)

+0

有2級陣列的目的是什麼,以及如何轉換到您的預期輸出? – jcsanyi

回答

1

你應該做的是在PDO或mysqli中使用準備好的語句。它保護你免受sql注入,並且不推薦使用mysql_*函數。

那麼你的SQL就像(我通常喜歡命名變量像:year等,但這樣的工作以及):

$sql = "INSERT INTO 
    auto(year, make, model, engine, sound_system, mileage, att1, att2, 
    att3, att4, att5, att6, att7, att8, att9, att10, att11, att12, att13, att14, att15, picture1, 
    picture2, picture3, picture4, picture5, picture6, picture7, picture8, picture9, 
    picture10, picture11, picture12) 
    VALUES 
    (?, ?, ?, ..., ?, ?, ?)"; // as many question marks as variables 

和PDO你會execute(見完整的例子手冊)它喜歡:

// assuming that $dbh contains your PDO database connection 
$sth = $dbh->prepare($sql); 
$sth->execute($final[0]); 
+0

哇這多複雜,我還沒有在pdo中挖過很多,任何其他方式在正常的PHP呢? –

+0

@sdfasdfad與你的方式沒什麼不同,你避免了整個逃跑的部分。它是目前的*正常的PHP *方式:) – jeroen

+0

@sdfasdfad PDO是正常的PHP和更容易,然後mysql_ *更不用說更安全! – Prix

1

雖然prepared statements是一個更好的方式來處理這個問題,它也可以做這樣的事情(假設你正在使用的mysqli_*功能)。

$items = array_merge($final[0], $final[1]); 
$safeItems = array_map($items, 'mysqli_real_escape_string'); 
$sqlString = "'" . join("', '", $safeItems) . "'"; 

我們使用array_merge()$final兩個部分連接成一個陣列。或者,我們可以從這樣的原始值構建:$items = array_merge($info, $paths)

我們使用array_map()調用 mysqli_real_escape_string()爲了正確逃生每個值,以防止SQL注入

我們使用join()一切結合在一起成爲最終的輸出。

這就是說,它看起來像你實際上使用mysql_*函數。這些功能應該使用而不是有很好的理由。在這裏看到更多的細節:Why shouldn't I use mysql_* functions in PHP?

+0

令人驚歎的非常感謝這個作品 –

相關問題