Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
colobaev
17 / 17 / 11
Регистрация: 02.05.2014
Сообщений: 82
1

PHP PDO не обновляет данные в MySQL

25.07.2017, 04:44. Просмотров 259. Ответов 7
Метки нет (Все метки)

Приветствую форумчане. Не могу понять, почему следующий код не обновляет в MySQL данные
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public function edit($ignored=Array())
    {
        global $registry;
        
        $vars = get_class_vars(get_class($this));
        $vars = get_defined_vars();
        foreach ($vars["this"] as $key => $v)
        {
            if ($key == "error" || $key == "id" || $key == "name_module" || in_array($key, $ignored)) continue;
            $data[':'.$key] = $v;
            $val .= ", $key=:$key";
        }
        $val[0] = $val[1] = '';
        
        $mod = htmlspecialchars(trim("mod_" . $this->name_module . "_category"));
        $query = "UPDATE $mod SET $val WHERE id=:id";
        $query = $registry->get("db")->prepare($query);
        $query->bindParam(':id', $this->id);
        foreach ($data as $key => $val)
        {
            $query->bindParam($key, $val);
        }
        
        $query->execute();
        if ($query->rowCount() == 0)
        {
            $this->error = 1;
            return false;
        }
        
        $this->error = 0;
        return true;
    }
Если вручную добавить в запрос вместо $var то, что храниться в этой переменной, то запрос успешно выполняется.
errorInfo выдает следующую информацию:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2017, 04:44
Ответы с готовыми решениями:

Firefox неверно обновляет данные в таблице MySql ?
Здравствуйте! Есть простой счетчик кол-во просмотров статьи, к последнему...

Php,pdo, mysql+php,
К примеру у меня есть функция добавления в бд через PDO Так вот, а если я...

PHP Не заносит данные Mysql
сборка apache 2.4.3, mysql 5.5.23, php 5.4.9, phpmyadmin 3.5.5 на ноутбуке не...

Php невносит данные в mysql
Здраствуйте, помогите пожалуйсто, написал простейшую программу для регистрации...

php выводим данные из mysql
Что я делаю не так? Не хочет выводить данные из базы хотя данные правильны и в...

7
Блеф
> /dev/null
284 / 118 / 85
Регистрация: 14.05.2014
Сообщений: 767
25.07.2017, 15:53 2
приведите текст sql запроса с переменой
0
colobaev
17 / 17 / 11
Регистрация: 02.05.2014
Сообщений: 82
25.07.2017, 20:36  [ТС] 3
SQL
1
UPDATE mod_pages_category SET name=:name, archive=:archive, rights=:rights, uri=:uri WHERE id=:id
0
Вилки Выкидные
-3 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
26.07.2017, 13:33 4
Судя по тому что мы читаем в мануале по bindParam: ...переменная привязывается по ссылке...

То по логике цикл должен выглядеть примерно так:

PHP
1
2
3
4
foreach ($data as $key => &$val)
{
    $query->bindParam($key, $val);
}
0
colobaev
17 / 17 / 11
Регистрация: 02.05.2014
Сообщений: 82
26.07.2017, 13:50  [ТС] 5
Неа, не работает. Приведу еще раз код, в котором добавлю переменную с полным запросом $q, которая успешно выполняется. В эту переменную я записал то, что вывел print'ом из $query.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public function edit($ignored=Array())
    {
        global $registry;
        
        $vars = get_class_vars(get_class($this));
        $vars = get_defined_vars();
        foreach ($vars["this"] as $key => $v)
        {
            if ($key == "error" || $key == "id" || $key == "name_module" || in_array($key, $ignored)) continue;
            $data[':'.$key] = $v;
            $val .= ", $key=:$key";
        }
        $val[0] = $val[1] = '';
        
        $mod = htmlspecialchars(trim("mod_" . $this->name_module . "_category"));
        $query = "UPDATE $mod SET $val WHERE id=:id";
        $q = "UPDATE mod_pages_category SET name=:name, archive=:archive, rights=:rights, uri=:uri WHERE id=:id";
        $query = $registry->get("db")->prepare($q);
        $query->bindParam(':id', $this->id);
        foreach ($data as $key => $val)
        {
            $query->bindParam($key, $val);
        }
        
        $query->execute();
        if ($query->rowCount() == 0)
        {
            $this->error = 1;
            return false;
        }
        
        $this->error = 0;
        return true;
    }
0
Вилки Выкидные
-3 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
26.07.2017, 13:56 6
colobaev, в $data у Вас массив именованных параметров со значениями ?

распечатайте перед вторым циклом

PHP
1
echo '<pre>' . print_r($data, true) . '</pre>';
0
colobaev
17 / 17 / 11
Регистрация: 02.05.2014
Сообщений: 82
26.07.2017, 16:04  [ТС] 7
Всё верно

Array
(
[:name] => NewName
[:archive] => 123
[:rights] => 123
[:uri] => test
)

Добавлено через 2 часа 4 минуты
Поправил код, работает. Спасибо кто откликнулся =)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function edit($ignored=Array())
    {
        global $registry;
        
        $vars = get_class_vars(get_class($this));
        $vars = get_defined_vars();
        $value = "";
        foreach ($vars["this"] as $key => $val)
        {
            if ($key == "error" || $key == "id" || $key == "name_module" || in_array($key, $ignored)) continue;
            $data[$key] = $val;
            $value .= "$key=:$key, ";
        }
        $value = substr($value, 0, -2);
        $mod = htmlspecialchars(trim("mod_" . $this->name_module . "_category"));
        $query = $registry->get("db")->prepare("UPDATE $mod SET $value WHERE id = :id");
        $data["id"] = $this->id;
        $query->execute($data);
        if ($query->rowCount() == 0)
        {
            $this->error = 1;
            return false;
        }
        
        $this->error = 0;
        return true;
    }
0
Вилки Выкидные
-3 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
26.07.2017, 16:25 8
Цитата Сообщение от colobaev Посмотреть сообщение
Поправил код
я кстати тоже так PDO юзаю без биндов, просто массив извлекаю с именованными параметрами и значениями
0
26.07.2017, 16:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2017, 16:25

Не добавляет данные из php в бд mysql
Помогите, не могу понять, почему не добавляет данные в бд......

php не выбирает нужжные данные из MySQL
Добрый вечер, пролема - с помощью формы передаю параметры методом GET, и при...

Как изменить данные в MySQL из PHP
Всем доброго времени суток. Я тут наткнулся на одну так сказать &quot;проблему&quot;. У...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru