我有一个关联数组,可以将每个'key'和'value'插入到我的数据库表中。目前,针对循环的每次迭代 的每个键 运行单独的查询,但是我希望它抓住每个'key'和'element',并将它们插入为在 一个 查询中配对。
PHP:
$elements = array(
'column_1' => 'data1',
'column_2' => 'data2',
'column_3' => 'data3'
);
foreach($elements as $key=>$value) {
$key = $key;
$value = $value;
DB::query('INSERT INTO `table` (' . $key . ') VALUES (?);', array($value));
}
答案 0 :(得分:1)
您可以使用sprintf()
来决定要插入哪些列,例如:
sprintf("INSERT INTO '%s' ('%s', '%s') VALUES ('%s', '%s')", $array[tableName], $array[col1name], $array[col2name], $array[col1val], $array[col2val]);
我希望这是你要找的那种东西?
答案 1 :(得分:0)
$count = 0;
$fields = '';
foreach($elements as $col => $val) {
if ($count++ != 0)
$fields .= ', ';
$col = mysql_real_escape_string($col);
$val = mysql_real_escape_string($val);
$fields .= "`$col` = $val";
}
$query = "INSERT INTO `table` SET $fields";
试试这个......
答案 2 :(得分:0)
尝试这样
$columns = implode(", ", array_keys($elements));
$escaped = array_map('mysql_real_escape_string', array_values($elements));
$values = implode(", ", $escaped);
$sql = "INSERT INTO `table` ($columns) VALUES ($values)";
答案 3 :(得分:0)
您不必使用foreach来创建查询。您可以结合使用implode()
,array_keys()
和array_values()
函数:
$elements = array(
'column_1' => 'data1',
'column_2' => 'data2',
'column_3' => 'data3'
);
$fieldNames = array_keys($elements));
$fieldsQueryPart = '`' . implode('`, `', $fieldNames . '`';
$valuesQueryPart = implode(',', array_fill(0, count($fieldNames), '?'));
$values = array_values($elements);
DB::query('INSERT INTO `table` (' . $fieldsQueryPart . ') VALUES (' . $valuesQueryPart . ');', $values);
编辑:
因为我认为您使用普通PDO
,所以应该替换DB::query()
行。您必须先创建PDO
对象:
$pdo = new PDO($dsn, $user, $password);
然后你需要准备声明:
$statement = $pdo->prepare('INSERT INTO `table` (' . $fieldsQueryPart . ') VALUES (' . $valuesQueryPart . ');');
最后两个步骤是将值绑定到查询并执行它,或者只是将值传递给execute()
方法
$statement->execute($values);
OR
foreach ($values as $key => $value) {
$statement->bindValue($key + 1, $value);
}
$statement->execute();
答案 4 :(得分:0)
然后你应该这样使用:
$columns = implode(", ", array_keys($elements));
$values = implode(", ", array_values($elements));
$sql = "INSERT INTO `table` ($columns) VALUES ($values)";
答案 5 :(得分:0)
如评论中所述,这是一个例子: 问号可以是一个值数组,因此每个问号都应该绑定到一个值。
public function query($sql, $params = array()) {
$this->_error = false;
if ($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if (count($params)) {
foreach ($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if ($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
} else {
$this->_error = true;
}
return $this;
}