Pentru a înțelege mai bine codul, cred că repeți queries (eventual extragi toată interogarea într-o metodă separată, unde doar apelezi key/value, gen updateOptions('system_live', $system_live)).
Ce vrei tu se poate, dar face expresiile sunt ceva mai greu de citit pentru nivelul tău:
@bunicu9: Nu vreau să mă înțelegi greșit sau să mi-o iei în nume de rău, dar în mai multe ocazii ai lăsat impresia că prima ta oprire este DevForum. Eu unul apreciez că vrei să înveți, că încerci chestii, că faci, dar un skill important în programare este și acela de a efectua căutări eficiente.
Un prim pas în a găsi o rezolvare este a înțelege diferența dintre coloane și rânduri: coloanele sunt verticale (gândește-te la o coloană - sau stâlp - al Pantheon-ului). Rândul este orizontal, ca atunci când scrii un mesaj de „câteva rânduri”. Din INSERT-ul tău, aș zice că tu vrei să actualizezi rânduri, nu coloane.
<?php
$stmt = $conn->prepare("
UPDATE
system_options
SET
option_value = (
CASE
WHEN option_name = 'system_live' THEN :system_live
WHEN option_name = 'system_message' THEN :system_message
WHEN option_name = 'system_title' THEN :system_title
WHEN option_name = 'system_desc' THEN :system_desc
END
)
WHERE
FIND_IN_SET(
option_name,
'system_live, system_message, system_title, system_desc'
)
");
$stmt->bindParam(':system_live', $system_live);
$stmt->bindParam(':system_message', $system_message);
$stmt->bindParam(':system_title', $system_title);
$stmt->bindParam(':system_desc', $system_desc);
$stmt->execute();
$Execute = $stmt->execute();
Iar dacă știi că nu sunt multe setări (rânduri) în tabelul system_options, atunci ai putea folosi:
<?php
$stmt = $conn->prepare("
UPDATE
system_options
SET
option_value = (
CASE
WHEN option_name = 'system_live' THEN :system_live
WHEN option_name = 'system_message' THEN :system_message
WHEN option_name = 'system_title' THEN :system_title
WHEN option_name = 'system_desc' THEN :system_desc
ELSE option_value
END
)
");
$stmt->bindParam(':system_live', $system_live);
$stmt->bindParam(':system_message', $system_message);
$stmt->bindParam(':system_title', $system_title);
$stmt->bindParam(':system_desc', $system_desc);
$stmt->execute();
$Execute = $stmt->execute();
Sau, un o alta abordare, mai simpla de inteles, folosind multi_query.
<?php
$stmt = $conn->prepare("
UPDATE system_options SET option_value = :option_value1 WHERE option_name = :option_name1;
UPDATE system_options SET option_value = :option_value2 WHERE option_name = :option_name2;
UPDATE system_options SET option_value = :option_value3 WHERE option_name = :option_name3;
UPDATE system_options SET option_value = :option_value4 WHERE option_name = :option_name4;
");
$stmt->bindParam(':option_name1', 'system_live');
$stmt->bindParam(':otpion_value1', $system_live);
$stmt->bindParam(':option_name2', 'system_message');
$stmt->bindParam(':otpion_value2', $system_message);
$stmt->bindParam(':option_name3', 'system_title');
$stmt->bindParam(':otpion_value3', $system_title);
$stmt->bindParam(':option_name4', 'system_desc');
$stmt->bindParam(':otpion_value4', $system_desc);
$Execute = $stmt->multi_query();
Tinand cont de faptul ca trimiti toate query-urile dintr-o data, catre DB, cred ca nu e mare diferenta de performanta.
LE: Pe de alta parte, daca nu te intereseaza sa faci filtrari, specific, dupa fiecare valoare in parte, atunci poti lua in calcul stocarea in format JSON, a tuturor datelor. Ar fi optim.