#php #mysql
#php #mysql
Вопрос:
Данные, введенные пользователем:
"product_description": [{
"language_id": 1,
"name": "okayt321sd1a"
}
Обновить базу данных:
foreach ($data['product_description'] as $product_description) {
foreach ($product_description as $key => $value) {
$a[$key] = $value;
if($a[$key]){
$this->db->query("UPDATE " . DB_PREFIX . "product_description SET language_id = '" . (int)$language_id . "', name = '" . $this->db->escape(html_entity_decode($product_description['name'])) . "', meta_keyword = '" . $this->db->escape(html_entity_decode($product_description['meta_keyword'])) . "', meta_description = '" . $this->db->escape(html_entity_decode($product_description['meta_description'])) . "', description = '" . $this->db->escape($product_description['description']) . "', tag = '" . $this->db->escape($product_description['tag']) . "',
page_title = '" . $this->db->escape($product_description['page_title']) . "',
highlight = '" . $this->db->escape($product_description['highlight']) . "',
whatbox = '" . $this->db->escape($product_description['whatbox']) . "' WHERE product_id = '" . (int)$product_id . "',
");
}
}
}
Как я могу обновить данные на основе пользовательского ввода, например, если пользователь вводит
"language_id": 1,
"name": "okayt321sd1a"
тогда я обновляю только эти 2 данные в базу данных, остальные данные останутся, если ввести 3 данные:
"language_id": 1,
"name": "okayt321sd1a"
page_title
тогда я обновляю только эти 3 данные в базу данных, остальные данные останутся.
Ответ №1:
Вероятно, вы хотите создать функцию, которая будет создавать sql для вас. Я предполагаю, что вы используете PDO (я не знаю, но в этом примере используется PDO). Вы должны привязать параметры / значения в любом случае. Чтобы добавить пользовательские поля, просто используйте array_merge()
. Вы можете использовать array_diff()
или unset()
удалять ненужные значения / ключи:
function updateProductDesc($array,$where,$db)
{
foreach($array as $key => $value) {
$sKey = ":{$key}";
$bind[$sKey] = htmlspecialchars($value);
$sql[] = "`{$key}` = {$sKey}";
}
$bind[":where"] = (int) $where;
$query = $db->prepare("UPDATE ".DB_PREFIX."product_description SET ".implode(", ",$sql)." WHERE `product_id` = :where");
$query->execute($bind);
}
foreach ($data['product_description'] as $product_description) {
foreach ($product_description as $key => $value) {
$a[$key] = $value;
if($a[$key]){
updateProductDesc($product_description,$product_id,$this->db);
}
}
}