Обновление SQL с массивами PHP

Допустим, у меня есть и массив, как это

$array= Array('id'=>'3', 'name'=>'NAME', 'age'=>'12');

Ключи из этого массива — это имена столбцов в таблице, а значения — это значения столбцов, которые мне нужно обновить.
Я хочу обновить таблицу на основе ключей и значений.
Я использую ADODB
пожалуйста, помогите мне

1

Решение

попробуй это:

$sql = "UPDATE table SET ";
foreach($array as $key=>$value) {
$sql .= $key . " = " . $value . ", ";
}

$sql = trim($sql, ' '); // first trim last space
$sql = trim($sql, ','); // then trim trailing and prefixing commas

и конечно WHERE пункт:

$sql .= " WHERE condition = value";

вы получите строку:

UPDATE table SET id = 3, name = NAME, age = 12 WHERE condition = value

L.E: Возможно, вам понадобится добавить апострофы в строки, поэтому я должен изменить свой код на что-то вроде этого:

$sql = "UPDATE table SET ";
foreach($array as $key=>$value) {
if(is_numeric($value))
$sql .= $key . " = " . $value . ", ";
else
$sql .= $key . " = " . "'" . $value . "'" . ", ";
}

$sql = trim($sql, ' '); // first trim last space
$sql = trim($sql, ','); // then trim trailing and prefixing commas

$sql .= " WHERE condition = value";

который будет производить это:

UPDATE table SET id = 3, name = 'NAME', age = 12 WHERE condition = value

Л.Е. 2: Если вам нужен столбец id в вашем состоянии, код становится следующим:

$sql = "UPDATE table SET ";
foreach($array as $key=>$value) {
if($key == 'id'){
$sql_condition = " WHERE " . $key . " = " . $value;
continue;
}
if(is_numeric($value))
$sql .= $key . " = " . $value . ", ";
else
$sql .= $key . " = " . "'" . $value . "'" . ", ";
}

$sql = trim($sql, ' '); // first trim last space
$sql = trim($sql, ','); // then trim trailing and prefixing commas

$sql .= $sql_condition;

который даст такой результат:

UPDATE table SET name = 'NAME', age = 12 WHERE id = 3

Надеюсь это поможет! : D

2

Другие решения

foreach ($update_array as $key => $testimonials) {
$name = mysql_real_escape_string($testimonials->name);
$content = mysql_real_escape_string($testimonials->content);
$id = intval($testimonials->id);

$sql = "UPDATE testimonials SET name='$name', content='$content' WHERE id=$id";
$result = mysql_query($sql);
if ($result === FALSE) {
die(mysql_error());
}
}

Источник : https://stackoverflow.com/a/7884331/3793639

Другие источники, чтобы проверить.
PHP SQL Update массив а также Простая таблица обновлений MySQl из массива php

0

Вы могли бы использовать что-то вроде этого для достижения этого:

foreach($values as $value) {
if(!key_exists($value, $item)) {
return false;
}

$table->{$value} = $items[$value];
}
0

Предполагая, что индекс ключа всегда равен id, и что adodb может использовать именованные заполнители, вы можете сделать это:

$array = Array('id'=>'3', 'name'=>'NAME', 'age'=>'12');
$set = array();
$data = array();
while(list($key,$value)=each($array)) {
$data[':'.$key] = $value;
if($key!='id') {
$set[] = $key . ' = :' . $key;
// if no placeholders use $set[] = $key . " = '" . database_escape_function($value) . "'";
}
}
$sql = "UPDATE table SET ".implode($set, ',')." WHERE id=:id";

//$data is now Array(':id'=>'3', ':name'=>'NAME', ':age'=>'12');
//$sql is now  "UPDATE table SET name=:name, age=:age WHERE id=:id";

$stmt = $DB->Prepare($sql);
$stmt = $DB->Execute($stmt, $data);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector