[英]How can I insert data into multiple columns using one query with a foreach loop?
我有一个关联数组,将每个“键”和“值”插入数据库表。 目前,每个查询针对循环的每个迭代针对每个键运行,但是我希望它获取每个“键”和“元素”,并将它们成对插入一个查询中。
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));
}
您可以使用sprintf()
决定要插入哪些列,例如:
sprintf("INSERT INTO '%s' ('%s', '%s') VALUES ('%s', '%s')", $array[tableName], $array[col1name], $array[col2name], $array[col1val], $array[col2val]);
我希望这是您想要的东西?
$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";
尝试这个...
这样尝试
$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)";
您不必使用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);
要么
foreach ($values as $key => $value) {
$statement->bindValue($key + 1, $value);
}
$statement->execute();
然后,您应该这样使用:
$columns = implode(", ", array_keys($elements));
$values = implode(", ", array_values($elements));
$sql = "INSERT INTO `table` ($columns) VALUES ($values)";
如评论中所述,这是一个示例:问号可以是值的数组,因此每个问号都应绑定到一个值。
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.