2014-01-30 46 views
3

我有一個關於在phpimplode()問題破滅(),我有這個array()如何正確使用與關聯數組

$user_data = array(
    'user_id_num' => $_POST['userid'], 
    'fullname' => $_POST['userfname'], 
    'username' => $_POST['useruname'], 
    'password' => $password_hash 
); 

我想達到的目標是這樣的,例如,

爲田野

`user_id_num`,`fullname`,`username`,`password` 

和值

'2159','Sample Name','example','mypassword' <- hash password 

我所到目前爲止已經試過這是

$user_fields = '`' . implode('`, `', $user_data) . '`'; 
$user_data = '\'' . implode('\', \', $user_data) . '\''; 

但我無法得到我想要實現有人可以幫助我?在此先感謝

+0

您可以使用普通的老'破滅($ USER_DATA)'爲你的價值觀和'破滅(array_keys($ USER_DATA))'爲你的鑰匙。 – ToBe

+0

你是什麼意思?如果我只使用'implode($ user_data)',我還能夠實現我想要的嗎? – Pengun

+0

我不知道你是否正在嘗試使用SQL,但請不要!如果那是你正在做的事情,使用一些orm。 – marctrem

回答

2

嘗試

$user_fields = '`' . implode('`, `', array_keys($user_data)) . '`'; 
$user_data = "'" . implode("', '", array_values($user_data)) . "'"; 
+0

這個爲我工作非常感謝:D – Pengun

0

我不會引述-破滅串這樣的;雖然它可能工作,但很難閱讀並且容易出錯。正確的做法是正確用逗號只是引述每個人進入和內爆結果:

$fields = join(',', array_map(function ($field) { return "`$field`"; }, array_keys($user_data))); 
$data = join(',', array_map(function ($value) { return mysql_real_escape_string($value); }, $user_data)); 

名稱由你控制的領域,因爲這樣用反斜槓引述他們就足夠了。對於用戶提供的數據,您需要通過適當的SQL轉義函數或更好的版本運行它,然後使用準備好的語句。上面演示了使用mysql_擴展的傳統方法,這些事情你現在真的不應該再做了。

代碼應該更是這樣的:

$fields = join(',', array_map(function ($field) { return "`$field`"; }, array_keys($user_data))); 
$placeholders = join(',', array_map(function ($field) { return ":$field"; }, array_keys($user_data))); 

$stmt = $pdo->prepare("INSERT INTO foo ($fields) VALUES ($placeholders)"); 
$stmt->execute($user_data); 
+0

謝謝,但我發現你的代碼更復雜,我想學習如何正確使用這個'implode()'方法 – Pengun

+0

是的,抱歉,更復雜。 :) – deceze