Привет.
Есть простенькая функция, которая принимает аргументы названия базы и массив значений :
function insertDbValue($db, $values, $where = null)
{
$bindAr = prepareBindParams($values, true, true);
$paramsString = prepareBindParams($values, true, false);
include DB;
$sql = "
INSERT INTO $db ($paramsString)
VALUES ($bindAr)
";
$result = $pdo->prepare($sql);
foreach($values as $key=>$val){
$result->bindValue(":{$key}", $val);
}
$result->execute();
}
Вызываю в коде:
$values = ['status_text' => 'Тестовый статуз', 'status_source' => 'site.ru'];
insertDbValue('statuses', $values) ;
prepareBindParams
возвращает определенного рода массив, она не при делах, ее не пишу.
Я грешил на foreach, но записав на бумаге алгоритм с него сомнения отпали. Мб неправильно понимаю механизм работы bindValue: мне казалось что foreach должен сам сделать из такого
$s->bindValue(':order_message', $order_message);
$s->bindValue(':comment', $comment);
$s->bindValue(':checkout', $checkout);
$s->bindValue(':items', $items);
$s->bindValue(':id', $id);
$s->execute();
Такое
foreach($values as $key=>$val){
$result->bindValue(":{$key}", $val);
}
$result->execute();
Не могу понять в чем косяк и почему 2 значения уходят в базу, а не одно.
Вопрос: за каждый вызов функции insertDbValue($db, $values, $where) строк статуса добавляется в базу 2, а не 1. Почему 2?
п.с. говоря про bindValue - смутило что при отлове массива $result в цикле каждую итерацию вылезает полный запрос.