Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите занести данные в бд с помощью ПДО

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Webtest
Отправлено: 13 Октября, 2014 - 17:22:39
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте!

Уже, наверно, часа 2 никак не могу вставить данные в таблицу. Есть бд с заголовками:
id category_id image text date_add
Подключаюсь к бд:
PHP:
скопировать код в буфер обмена
  1. $user = '...';
  2. $pass = '...';
  3. $db = '...';
  4. $dsn = "...";
  5. $opt = array(
  6.         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  7.         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
  8. );  
  9. $pdo = new PDO($dsn, $user, $pass, $opt);

Пробую сделать какой-нибудь запрос, все выводится:
PHP:
скопировать код в буфер обмена
  1. $stm = $pdo->prepare("SELECT image FROM `items`");
  2. $stm->execute();
  3. $name = $stm->fetchAll();
  4. print_r($name);

Если пробую что-нибудь добавить, то выводит ошибку:
PHP:
скопировать код в буфер обмена
  1. Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1 near "SET": syntax error' in .../1.php:77
  2. Stack trace:
  3. #0 .../1.php(77): PDO->prepare('INSERT INTO use...')
  4. #1 {main}
  5.  thrown in .../1.php on line 77

Вот 77 строка: $stm = $pdo->prepare($sql);
Т.е. как я понял, неверно сделан запрос?
Вот запрос и функция:
PHP:
скопировать код в буфер обмена
  1. function pdoSet($fields, &$values, $source = array())
  2. {
  3.         $set = '';
  4.         $values = array();
  5.         if (!$source) $source = &$_POST;
  6.         foreach ($fields as $field) {
  7.                 if (isset($source[$field])) {
  8.                         $set.="`".str_replace("`","``",$field)."`". "=:$field, ";
  9.                         $values[$field] = $source[$field];
  10.                 }
  11.         }
  12.         return substr($set, 0, -2);
  13. }
  14.  
  15. $date = time();
  16. $fields = array('category_id', 'image', 'text', 'date_add');
  17. $values = array('13', '019230123.jpg', '', $date);
  18. $sql = "INSERT INTO users SET " . pdoSet($fields, $values);
  19. $stm = $pdo->prepare($sql);
  20. $stm->execute($values);

Подскажите в чем проблема?
 
 Top
Panoptik
Отправлено: 13 Октября, 2014 - 17:50:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




попробуйте использовать стандартный синтаксис вставки
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO users (category_id, image, `text`, `date_add`) VALUES('13', '01231231.jgp', '', $date)

(Отредактировано автором: 13 Октября, 2014 - 17:50:41)



-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 13 Октября, 2014 - 19:19:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Webtest пишет:
Т.е. как я понял, неверно сделан запрос?

Так запрос-то выведите.


-----
PostgreSQL DBA
 
 Top
Webtest
Отправлено: 14 Октября, 2014 - 10:24:36
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий, вот выведенный запрос:
PHP:
скопировать код в буфер обмена
  1. INSERT INTO gallery_items (`category_id`, `image`, `text`, `date_add`) VALUES('13', '01231231.jgp', '', '1413271351')

Вот ошибка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning:  PDOStatement::execute() expects parameter 1 to be array, string given in /.../1.php on line 77

Вот код:
PHP:
скопировать код в буфер обмена
  1. $date = time();
  2. $sql = "INSERT INTO gallery_items (`category_id`, `image`, `text`, `date_add`) VALUES('13', '01231231.jgp', '', '" . $date . "')";
  3. echo $sql;
  4. $stm = $pdo->prepare($sql);
  5. $stm->execute($sql);

Вот 77 колонка: $stm->execute($sql);
 
 Top
Мелкий Супермодератор
Отправлено: 14 Октября, 2014 - 10:29:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Хм Я не буду это комментировать.


-----
PostgreSQL DBA
 
 Top
Webtest
Отправлено: 14 Октября, 2014 - 10:31:04
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий, а все, починил. Всем спасибо! Я, просто, с ПДО 1 раз столкнулся, не знал как делать. Улыбка

(Отредактировано автором: 14 Октября, 2014 - 10:33:07)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB