Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 17

PDO+INSERT+POSTGRESQL+ array columns

12.07.2017, 11:05. Показов 2045. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать Insert в PDO+INSERT+POSTGRESQL+ array columns??? просто пример.
PHP
1
2
3
4
5
6
7
8
9
10
$query = $db->prepare('INSERT INTO aw_bi_dev (duration_in_minutes, project_id, task_id, task_name, time_entry_type,user_comment,user_id) VALUES ({":duration_in_minutes"},  {":project_id"}, {":task_id"}, :task_name, {":time_entry_type"}, :user_comment,{":user_id"})');
    
    $query->bindValue(':duration_in_minutes', $value->duration_in_minutes,PDO::PARAM_INT); 
    $query->bindValue(':project_id', $value->project_id);
    $query->bindValue(':task_id', $value->task_id);
    $query->bindValue(':task_name', $value->task_name);
    $query->bindValue(':time_entry_type', $value->time_entry_type);
    $query->bindValue(':user_comment', $value->user_comment);
    $query->bindValue(':user_id', $value->user_id);
    $inserted =$query->execute()
Выбивает ошибку
SQLSTATE[HY093]: Invalid parameter number: :duration_in_minutes
Явно что-то не так с bindValue,что там должно быть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2017, 11:05
Ответы с готовыми решениями:

Pdo, postgresql, lastinsertid
Здравствуйте, В документации pdo написано: Но у меня в postgre 9.6 $pdo->lastInsertId() без указания имени...

Insert и PDO
Прописываю Insert запрос к БД, с использованием PDO: $reg_data = array( 'user' => $user, 'password' => $password, 'email'...

Неработает INSERT INTO в PDO
Такая нарисовалась ситуация, делаю INSERT запрос к БД, возвращает TRUE, но запись в БД не вставляется, уже проверил все переменные, их...

9
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
12.07.2017, 18:45
1. В VALUES () пишите имена параметров без всяких обрамлений - VALUES (:name1, :name2, :name3).

2. bindValue() используется для передачи значений, для передачи переменных используется bindParam().

0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 17
12.07.2017, 19:02  [ТС]
1. В VALUES () пишите имена параметров без всяких обрамлений - VALUES (:name1, :name2, :name3).
У меня PostgreSql столбцы массивы! без данных обрамлений, у меня будут ошибки синтаксиса, что их там не хватает.
2. bindValue() используется для передачи значений, для передачи переменных используется bindParam().
Значения переменные, какая разница? ты всегда туда передаешь значение переменной. в оф документаций такой же пример!
http://php.net/manual/ru/pdost... dvalue.php
К тому же с другими запросами у меня работает.
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
12.07.2017, 19:07
Цитата Сообщение от deathlike Посмотреть сообщение
в оф документаций такой же пример!
почувствуйте разницу, слева мануал по bindValue() справа мануал по bindParam()
Миниатюры
PDO+INSERT+POSTGRESQL+ array columns   PDO+INSERT+POSTGRESQL+ array columns  
0
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 17
12.07.2017, 19:28  [ТС]
Вилы Выкидные,
я тебе даже больше напишу в чем разница между функциями, но мою проблему это не решает.
Связывает PHP переменную с именованным или неименованным параметром подготавливаемого SQL запроса. В отличие от PDOStatement::bindValue(), переменная привязывается по ссылке, и ее значение будет вычисляться во время вызова PDOStatement::execute().
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
12.07.2017, 19:40
Цитата Сообщение от deathlike Посмотреть сообщение
я тебе даже больше напишу в чем разница между функциями
Не нуждаюсь, тем более зачем создавать тему, если Вы и так всё знаете сами

p.s. и я с Вами водяру не хлебал, чтобы на ты переписываться
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
12.07.2017, 21:04
Цитата Сообщение от deathlike Посмотреть сообщение
Invalid parameter number: :duration_in_minutes
Это из за указания имени параметра в кавычках - уберите их.
Цитата Сообщение от deathlike Посмотреть сообщение
что там должно быть?
Я мало знаком с PostgreSQL(а с массивами в нем не имел дела), но в классе PDO нет метода, позволяющего забиндить массив - только простые типы - строки/числа.
Да и в других "стандартных" модулях для работы с БД я подобного не видел...
Думаю вам придется собирать из массивов строки(например, используя PDO::quote+implode) и "руками" склеивать из них запрос.
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
13.07.2017, 00:50
Цитата Сообщение от Max Dark Посмотреть сообщение
нет метода, позволяющего забиндить массив
набросал навскидку, гляньте будет ли работать?

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
35
36
37
38
39
40
41
42
43
<?php
 
error_reporting(-1);
 
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo $e->getMessage();
}
 
function debug($arr)
{
    echo '<pre>' . print_r($arr, true) . '</pre>';
}
 
function assoc($sql, $item_value = [])
{
    global $pdo;
    $sql = $pdo->prepare($sql);
    debug($item_value);// смотрим, что в массиве
    foreach ($item_value as $item => $value) {
        if (is_bool($value)) {
            $type = PDO::PARAM_BOOL;// 5
        } elseif (is_int($value)) {
            $type = PDO::PARAM_INT;// 1
        } elseif (is_null($value)) {
            $type = PDO::PARAM_NULL;// 0
        } else {
            $type = PDO::PARAM_STR;// 2
        }
        $sql->bindValue($item, $value, $type);
        echo 'bindValue(' . $item . ', ' . $value . ', ' . $type .')<br>';// просто смотрим
    }
    $sql->execute();
    return $sql->fetch();
}
 
$var = 1;
 
$a = assoc('SELECT `name` FROM `test`.`test` WHERE `id` = :id AND `name` = :nm LIMIT 1', [':id' => $var,':nm' => 'aaa']);
 
echo '<br>' . $a['name'];
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
13.07.2017, 18:22
Цитата Сообщение от Вилы Выкидные Посмотреть сообщение
набросал навскидку, гляньте будет ли работать?
То, что вы набросали выполняет метод PDOStatement::execute(), с параметром в виде массива.
Сам код на первый взгляд рабочий, но делает не то, что требуется.
Самая близкая по смыслу задача - подстановка списка параметров в выражение IN().
На этапе написания запроса не известно, сколько будет параметров, а записать IN(:params_array) не получится, так как оно распознается как единое целое.
Поэтому и приходится генерировать запрос.
Код из справки
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/* Выполнение подготовленного запроса с использованием массива для IN выражения */
$params = array(1, 21, 63, 171);
/* Создаем строку из знаков вопроса (?) в количестве равном количеству параметров */
$place_holders = implode(',', array_fill(0, count($params), '?'));
 
/*
    В этом примере подготавливается запрос с достаточным количеством неименованных
    псевдопеременных (?) для каждого значения из массива $params. Когда запрос будет
    выполняться, эти знаки вопроса будут заменены на элементы массива. Это не то же
    самое, что использовать PDOStatement::bindParam(), где привязка осуществлялась по
    ссылке на переменную. PDOStatement::execute() связывает параметры по значению.
*/
$sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
0
97 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
14.07.2017, 13:39
Цитата Сообщение от Max Dark Посмотреть сообщение
так как оно распознается как единое целое.
принято
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2017, 13:39
Помогаю со студенческими работами здесь

Не работает insert запрос (PDO)
Здравствуйте. Помогите, пожалуйста, разобраться, почему не работает функция, выполняющая insert запрос к БД: public function...

PHP, PDO, POST, INSERT
Есть несколько баз данных, для удобства редакторования, администратор отправляет данные через метод POST, однако не только данные, но и...

Добавление в БД >> массивы (array) / группа чекбоксов PDO
Всем привет! Есть чекбокс: &lt;label&gt;&lt;input name=&quot;delivery&quot; value=&quot;1&quot; type=&quot;checkbox&quot;&gt;one&lt;/label&gt; &lt;label&gt;&lt;input...

Не выполняется INSERT средствами PDO prepared statement
Собственно проблема не вставляются данные в бд когда передаю их через placeholder'ры когда передаю прямым запросом все нормально. P.S...

PDO INSERT Placeholder
Посмотрите пожалуйста..., где я ошибся? Данные не отправляются в базу $jokedate= trim($_POST); ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru