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

Не работает insert запрос (PDO)

13.12.2015, 05:31. Показов 2558. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, разобраться, почему не работает функция, выполняющая insert запрос к БД:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public function insert($data, $table) {
        $columns = "";
        $values = "";
        
        foreach ($data as $column => $value) {
            $columns .= ($columns == "") ? "" : ", ";
            $columns .= $column;
            $values .= ($values == "") ? "" : ", ";
            $values .= $value;
        }
        
        try {
            $stmt = $this->pdo->prepare('INSERT into :table (:cols) VALUES (:vals)');
            $stmt->execute( array( 'table' => $table, 'cols' => $columns, 'vals' => $values ) );
            // Возвращает ID последней вставленной в БД записи
            return $this->pdo->lastInsertId();
        } catch (PDOException $e) {
            echo "Ошибка: ".$e->getMessage()."<br>";
            echo "На линии: ".$e->getLine();
        }
    }
Выдает следующую ошибку.

Code
1
2
3
4
5
Ошибка: SQLSTATE[42000]: Syntax error or access violation: 1064 
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 ''books' ('Title, PublishYear, PublishHouse') 
VALUES ('\'Уличный кот по' at line 1<br>На линии: 35
Пытаюсь вставить в таблицу books данные, которые получаю с формы:
"Title" - "Уличный кот по имени Боб",
"PublishYear" - 2013,
"PublishHouse" - "Рипол Классик'"

Почему возникает эта ошибка и что надо исправить?
И еще, мне нужно, чтобы этот запрос возвращал id только что вставленной записи, а lastInsertId() возвращает true...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2015, 05:31
Ответы с готовыми решениями:

Не работает запрос INSERT
$query=mysql_query(&quot;INSERT INTO `user` (`id`,`nick`,`name`,`ans`,`vk`,`dc`,`permission`,`forum`,`up`,`date`,`warn`,`reward`,`notes`) VALUE...

Не работает запрос INSERT с LEFT JOIN
Здравствуйте, у меня есть две таблицы tovari -id -tovar -client_id Clients -id -name Мне нужно, чтобы при запросе инсерт ...

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

3
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
13.12.2015, 10:16
Посмотрите, как работают подготовленные выражения, что они подставляют в запрос, и вы поймете свою ошибку. Если коротко - все неверно.
0
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 40
13.12.2015, 14:19  [ТС]
KOPOJI, спасибо, посмотрела статью на php.net. Получается, для каждой таблицы нужно писать свой запрос с подготовленными выражениями, т.к. поля везде разные? Нельзя создать универсальный метод?
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
13.12.2015, 14:48
Лучший ответ Сообщение было отмечено Kasumi1 как решение

Решение

Цитата Сообщение от Kasumi1 Посмотреть сообщение
Нельзя создать универсальный метод?
разбить на два этапа. Сначала подготавливается переменная с текстом запроса содержащим реальные имена таблиц и полей, а потом эта переменная подставляется аргументом в методы PDO
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2015, 14:48
Помогаю со студенческими работами здесь

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

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

PDO+INSERT+POSTGRESQL+ array columns
как сделать Insert в PDO+INSERT+POSTGRESQL+ array columns??? просто пример. $query = $db-&gt;prepare('INSERT INTO aw_bi_dev...

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

Перенос параметра при INSERT в другой запрос INSERT
Здравствуйте. Есть таблица Сlient, в которую при INSERT ClientID присваивается инкрементом. На этой же странице ниже прописываю второй...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru