humiliation
@humiliation
Чем больше знаю - тем больше дурак

Почему в базу добавляется два значения?

Привет.

Есть простенькая функция, которая принимает аргументы названия базы и массив значений :

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?
7b5c9f85b32f4dcca9e5446bc340171b.PNG

п.с. говоря про bindValue - смутило что при отлове массива $result в цикле каждую итерацию вылезает полный запрос.

19665da9119c4e9da4a302475691f8b2.PNG
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 2
humiliation
@humiliation Автор вопроса
Чем больше знаю - тем больше дурак
небольшой ап после курения стака и мануалов:

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);
    $result->execute($values);
}


форич оказался избыточен, но код по прежнему добавляется 2 раза.
Ответ написан
Комментировать
Nikita_Kudinov
@Nikita_Kudinov
Программирую свои программулины
Была подобная проблема. Справлялся только так:
include_once 'dbconnect.php';
Где файл dbconnect.php в виде:
<?php
error_reporting( E_ALL & ~E_DEPRECATED & ~E_NOTICE );
if(!mysql_connect("localhost","root",""))
{
	die('oops connection problem ! --> '.mysql_error());
}
if(!mysql_select_db("YOUR_DB"))
{
	die('oops database selection problem ! --> '.mysql_error());
}

?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы