PHPFAQ  
Начинающим   Технологии   MySQL   PDO   Ошибки   Ссылки   Юмор   Форум   SafeMySQL  
-- Список сообщений -- Поиск --
записать массив в базу pdo
dleden 18.09.15 10:22
Здравствуйте!
вкратце ситуация: есть массив $setings. Его заполняю из базы
<?php $pdo = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$setings = $pdo->query('SELECT name,title FROM setings')->fetchAll(PDO::FETCH_KEY_PAIR);
$pdo = null;
?>
Все удачно работает, и его использую например вот так <?php echo $setings['callmenottel']?>


В админке, все значения массива выводятся в форму (кол-во записей и значение поля name всегда постоянно, меняется только title). после редактирования и нажатия кнопки содержимое формы переносится снова в массив вот так
$setings->storeFormValues( $_POST );

??? вопрос: посоветуйте как эффективнее значение этого массива записать обратно в базу. есть ли действия обратные fetchAll(PDO::FETCH_KEY_PAIR);
ответить
PHPFaq 18.09.15 10:53
Можно использовать подготовленные выражения

Совсем уж готового способа в PDO нету, но можно использовать подготовленные выражения, как описано здесь: http://phpfaq.ru/pdo#multi

Только надо для начала почистить входной массив от лишних элементов (типа submit и т.д.) и дальше просто обновить в цикле:

function storeFormValues($data)
{
$stmt = $pdo->prepare('UPDATE settings SET name = ?, title = ?');
foreach ($data as $name => $title)
{
$stmt->execute([$name,$title]);
}
}

(я написал settings с двумя t)

И еще одна важная проблема - ПДО надо всегда переводить в режим исключений. Как это сделать, написано по ссылке выше.
ответить
PHPFaq 18.09.15 11:19
Кстати, $_POST можно не очищать

можно в форме сделать имена полей вида

<input type="text" name="data[name]"?>

и тогда в РНР перебрать готовый массив $_POST['data']
ответить
Написать
Имя:*
Заголовок:*
Вы робот?
Текст:
Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.

© phpfaq.ru, 2019 1558955710.006 sec. О сайте   Хостинг iHor.ru