从php数组构建PDO MYSQL查询?

时间:2012-01-24 19:42:30

标签: php mysql arrays

到目前为止,我正在尝试根据数组的值构建查询,

$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 个答案:

答案 0 :(得分:2)

由于$params是一串值,因此无法将其与$account['id']一起放入数组中。而是使用创建它的数组$userCost

// 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...
}

答案 1 :(得分:1)

你的问题(其中之一)就在这里:

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

$params变量是以逗号分隔的字符串:

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

您希望将params和值的关联数组传递给execute()方法,如下所示:

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

// ...

$q->execute($params);