[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDO
Stasonix
В очередной раз столкнулся с проблемой вставки данных в таблицу.

Таблица:


-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Авг 13 2012 г., 11:29
-- Версия сервера: 5.5.25a
-- Версия PHP: 5.4.5

SET SQL_MODE=
"NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "
+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `test`
--

-- --------------------------------------------------------

--
-- Структура таблицы `articles`
--

CREATE TABLE IF NOT EXISTS `articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cid` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


вот метод, который сохраняет данные

	/* сохранение статьи
* @param (int) i - идентификатор категории
* @param (string) $a - название статьи
* @param (string) $c - содержание статьи
*/

public function SaveArt($i,$a,$c)
{

if ($result = $this->pdo->prepare("INSERT INTO `articles`(`cid`,`title`,`content`) VALUES (':i',':a',':c')"))
{


$result->bindValue(":i",$i,PDO::PARAM_INT);
$result->bindValue(":a",$a,PDO::PARAM_STR);
$result->bindValue(":c",$c,PDO::PARAM_STR);

$result->execute();

// print_r($this->pdo->errorInfo());

return TRUE;

}
else
{

return FALSE;

}

}


Что я только ни делал уже и var_dump и ошибку смотрел PDO, но все проходит как по маслу, но! В таблице ничего не появляется, что может быть причиной этому?



Спустя 9 минут, 31 секунда (13.08.2012 - 11:42) Stasonix написал(а):
mysql> INSERT INTO `articles`(cid,title,content) VALUES (1,'test','soderzhanie')
;
Query OK, 1 row affected (0.14 sec)

mysql>


консольный вариант сработал, но php-шный нивкакую.

Спустя 2 минуты, 55 секунд (13.08.2012 - 11:45) Игорь_Vasinsky написал(а):
не юзал ни разу))

но может вместо

Цитата
bindValue

bindParam

Спустя 1 минута, 48 секунд (13.08.2012 - 11:47) Stasonix написал(а):
Игорь_Vasinsky, неа: http://php.net/manual/ru/pdostatement.bindvalue.php

Даже прямо вбил:

public function SaveArt($i,$a,$c)
{

if ($result = $this->pdo->prepare("INSERT INTO `articles`(`cid`,`title`,`content`) VALUES (':i',':a',':c')"))
{

$i = 3;
$a = "test me";
$c = "content test";


голяк.

Спустя 3 минуты, 46 секунд (13.08.2012 - 11:51) Игорь_Vasinsky написал(а):
а так сработает?

	/* сохранение статьи
* @param (int) i - идентификатор категории
* @param (string) $a - название статьи
* @param (string) $c - содержание статьи
*/

public function SaveArt($i,$a,$c)
{

if ($result = $this->pdo->prepare("INSERT INTO `articles`(`cid`,`title`,`content`) VALUES (?,?,?)"))
{


$result->bindValue(1,$i,PDO::PARAM_INT);
$result->bindValue(2,$a,PDO::PARAM_STR);
$result->bindValue(3,$c,PDO::PARAM_STR);

$result->execute();

// print_r($this->pdo->errorInfo());

return TRUE;

}
else
{

return FALSE;

}

}

Спустя 5 минут, 29 секунд (13.08.2012 - 11:56) Stasonix написал(а):
Игорь_Vasinsky, увы.


Расскоментил сообщение об ошибке:

Array
(
[0] => 00000
[1] =>
[2] =>
)


Я так понимаю это означает что ошибок вовсе и нету?

Спустя 10 минут, 51 секунда (13.08.2012 - 12:07) Stasonix написал(а):
включил сообщения об ошибках поболее серьезнее:


$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


<br />
<b>
Fatal error</b>: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '?' for column 'cid' at row 1' in model:104
Stack trace:
#0 model.php(104): PDOStatement->execute()
#1 controller.test.php(67): Feature->SaveArt(11, 'assssssss', '<p>&n...')
#2 {main}
thrown in <b>model.php</b> on line <b>104</b><br />


Очевидно что проблема с cid, но в чем?

cid - это число, var_dump, да и прямой ввод показал же.

Спустя 15 минут, 47 секунд (13.08.2012 - 12:23) Stasonix написал(а):
Извиняюсь, сам дурак.

Нашел причину (stackoverflow чуток помог). В общем все дело в долбанных кавычках, их попросту не надо ставить в запросе:

if ($result = $this->pdo->prepare("INSERT INTO `articles`(`cid`,`title`,`content`) VALUES (:i,:a,:c)"))


И усё.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.