$pdo = new PDO("mysql:host=localhost;dbname=test;charset=UTF-8","root","");
if ($result = $pdo->prepare("INSERT INTO `guests`(`guest`) VALUES(:g)"))
{
$g = "Alex";
$result->bindParam(":g",$g,PDO::PARAM_STR);
$result->execute();
}
ничего странного не заметили? Нет? Я тоже. Все прекрасно работает. Казалось бы...
Дело в том что это работает в отдельно взятом файле, допустим index.php, это я специально вынес в отдельный файл и проверил (все ок).
В моем же случае, так как у меня ООП это выглядит так:
public function setGuest($g)
{
if ($result = $this->pdo->prepare("INSERT INTO `guests`(`guest`) VALUES(:g)"))
{
$result->bindParam(":g",$g,PDO::PARAM_STR);
$result->execute();
}
}
как вы думаете что-то поменялось? Я думаю что нет, парадокс, но в 1-м случае запись добавляется в БД, во 2-м нет, что я уже только ни делал и кодировку менял и var_dump'ил $g, кстати это дает положительный результат, делал еще такой манёвр:
if ($result->execute()){ echo "Data added!" }
что выводило "Data added", но при этом сама запись в таблице не появляется, т.е. не происходит этого самого добавления, фантом!
Я просто решил уже сюда на форум написать потому что я просто напросто не знаю что делать в таком случае, ошибок скрипт тоже никаких не выводит. Ну че ему не нравится-то не пойму, кодировка везде UTF-8 (utf8_general_ci), сам файл и с BOM и без BOM пробовал, безрезультатно.
Спустя 7 часов, 43 минуты, 7 секунд (25.06.2012 - 08:52) Placido написал(а):
Нужно смотреть весь код проблемного класса (хотя бы в той части, где создается экземпляр класса PDO) плюс создание экземпляра этого класса и сам вызов метода. Без этого можно только гадать.
Спустя 11 минут, 2 секунды (25.06.2012 - 09:03) Stasonix написал(а):
смысл весь код класса смотреть? Это единственная функция которая вызывается вообще на сайте, т.е. при входе юзера(гостя) создается экземпляр класса, например:
ипроисходит добавление в бд. ошибки подключения к бд тоже нету, у меня там try-catch, да и так нету.
$user = new User();
$user->setGuest($g);
и
Спустя 3 минуты, 31 секунда (25.06.2012 - 09:07) Stasonix написал(а):
хмм, пардон, сделал вот так:
так сработало.
public function setGuest($g)
{
if ($result = $this->pdo->prepare("INSERT INTO `guests`(`guest`) VALUES(:g)"))
{
$g = "Maria";
$result->bindParam(":g",$g,PDO::PARAM_STR);
if ($result->execute()){ $e = "Data added"; $this->err($e); }
}
}
так сработало.
Спустя 5 минут, 38 секунд (25.06.2012 - 09:12) Stasonix написал(а):
проvar_dump'ил $g:
напр. если на вход подано "stas", то результат string(4) "stas", т.е. есть контакт, но в БД так ничего и не добавилось. Я ж говорю фантом.
public function setGuest($g)
{
$this->err($g);
if ($result = $this->pdo->prepare("INSERT INTO `guests`(`guest`) VALUES(:g)"))
{
$result->bindParam(":g",$g,PDO::PARAM_STR);
$result->execute();
}
}
напр. если на вход подано "stas", то результат string(4) "stas", т.е. есть контакт, но в БД так ничего и не добавилось. Я ж говорю фантом.