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
Форумы портала PHP.SU :: Версия для печати :: Помогите занести данные в бд с помощью ПДО
Форумы портала PHP.SU » » Вопросы новичков » Помогите занести данные в бд с помощью ПДО

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

1. Webtest - 13 Октября, 2014 - 17:22:39 - перейти к сообщению
Здравствуйте!

Уже, наверно, часа 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);

Подскажите в чем проблема?
2. Panoptik - 13 Октября, 2014 - 17:50:22 - перейти к сообщению
попробуйте использовать стандартный синтаксис вставки
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO users (category_id, image, `text`, `date_add`) VALUES('13', '01231231.jgp', '', $date)
3. Мелкий - 13 Октября, 2014 - 19:19:17 - перейти к сообщению
Webtest пишет:
Т.е. как я понял, неверно сделан запрос?

Так запрос-то выведите.
4. Webtest - 14 Октября, 2014 - 10:24:36 - перейти к сообщению
Мелкий, вот выведенный запрос:
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);
5. Мелкий - 14 Октября, 2014 - 10:29:20 - перейти к сообщению
Хм Я не буду это комментировать.
6. Webtest - 14 Октября, 2014 - 10:31:04 - перейти к сообщению
Мелкий, а все, починил. Всем спасибо! Я, просто, с ПДО 1 раз столкнулся, не знал как делать. Улыбка

 

Powered by ExBB FM 1.0 RC1