2012-01-24 176 views
0

我試圖建立從數組的值的查詢到目前爲止,我,從php數組構建PDO MYSQL查詢?

$itemPlus = $_POST['itemPlus']; 
$query = implode(', ', array_map(function($items) {return $items . ' = ' . $items . '-?';}, $items)); 
// $query = 'hats = hats-?, gloves = gloves-?, scarfs = scarfs-?' 
$params = implode(', ', $userCost); 
// $params = '10, 7, 9' 
$q = $dbc -> prepare("UPDATE items SET " . $query . ", $itemPlus = $itemPlus+1 WHERE id = ?"); 
$q -> execute(array($params, $account['id'])); 

它不工作,這是我第一次嘗試這個和它不工作,我明明做錯了什麼!?

感謝

+2

請定義「不起作用」 – Mike

+1

您的代碼易受SQL注入攻擊。請不要直接在查詢中使用'$ _POST'變量(或任何其他用戶輸入)。 – FtDRbwLXw6

+0

閱讀本文:http://www.ibm.com/developerworks/library/os-debug/ – webbiedave

回答

2

由於$params是值的字符串,你不能讓它到一個數組與$account['id']一起。創建它$userCost數組Instead.use:

// Start with the $userCost array... 
$paramArr = $userCost; 
// Add $account['id'] to it 
$paramArr[] = $account['id']; 
// And pass that whole array to execute() 
$q -> execute($paramArr); 

由於$itemPlus$_POST來了,你將需要確保有效投入。因爲它指的是列名,則建議使用一個白名單:

// Check against an array of possible column names: 
if (!in_array($_POST['itemPlus'], array('col1','col2','col3','col4',...)) { 
    // $_POST['itemPlus'] is NOT VALID 
    // Don't proceed... 
} 
+0

謝謝邁克爾,我現在可以看到它爲什麼不起作用,現在是謝謝你。 – cgwebprojects

+0

@cgwebprojects另請參閱我剛添加的關於驗證具有可能列值的白名單的itemPlus的部分... –

+0

如果找不到thr列,查詢是否失敗? – cgwebprojects

1

您的問題(其中之一)就出在這裏:

$q -> execute(array($params, $account['id'])); 

$params變量是一個逗號分隔字符串:

// $params = '10, 7, 9' 

你想PARAMS和值的關聯數組傳遞給​​方法,像這樣:

$params = array(
    'hats-?' => 10, 
    'gloves-?' => 7, 
    'scarves-?' => 9 
); 

// ... 

$q->execute($params);