PDO не вставляется в базу данных - PullRequest
2 голосов
/ 10 апреля 2011

Надеюсь, кто-нибудь сможет мне помочь, потому что я всю ночь бился головой об стену, пытаясь решить эту маленькую проблему.

Я хочу вставить данные в базу данных, используя PDO (который япо общему признанию не самый осведомленный о).Я использую утверждение, которое я использовал много раз в прошлом, но по какой-то причине на этот раз оно не работает.Утверждение таково:

$userID = "Johnny5"; 
$sql = "INSERT INTO user_info(user_id) VALUES(:user-id)";
         if($stmt = $this->_db->prepare($sql)) 
         {
            $stmt->bindParam(":user-id", $userID, PDO::PARAM_STR);
            $stmt->execute();
            $stmt->closeCursor();
            return TRUE;
         } else {
            return FALSE;
         }

Но, к сожалению, это всегда возвращает TRUE, не вводя ничего в мою базу данных.Я пробовал каждую комбинацию изменений в утверждении, которое мог придумать, но все еще в растерянности.

Я надеюсь, что кто-то там может указать на действительно простую ошибку, которую я сделал.

Кроме того, размещение одинарных кавычек вокруг параметра :user-id в строке $sql является единственнымспособ, которым я могу заставить что-либо появляться в базе данных, но это, очевидно, не вводит никаких фактических данных в базу данных.

EDIT Я также изменил типы параметров PDO с PDO::PARAM_STR до PDO::PARAM_INT, но все еще не повезло.

После дальнейшего расследования execute() возвращает FALSE.

Решение Спасибо всем за ихруководство.@Nabeel правильно сказал, что не следует использовать заполнители в параметрах PDO.

Ответы [ 3 ]

4 голосов
/ 10 апреля 2011

Не используйте тире в своих инструкциях SQL.

Сделайте это:

:user-id

как это:

:userid
0 голосов
/ 10 апреля 2011

Если что-то не получается, то наверняка произошла ошибка.Во-первых, вам нужно выяснить, какой оператор не выполняется, проверив их возвращаемые значения (всегда сначала читайте о каждой команде, которую вы используете в руководстве по PHP).

Если вы обнаружили, какая команда завершилась неудачно, используйте PDOStatement> errorInfo , чтобы узнать больше о конкретной ошибке.

Эта информация должна помочь вам решить вашу проблему.

Обновление: И если вы хотите иметь делос исключениями (как предложил Пекка): Как выжать сообщение об ошибке из PDO?

0 голосов
/ 10 апреля 2011

$userId - строка в этом коде, но вы говорите, что она в int, определяя PDO::PARAM_INT. Попробуйте заменить его на PDO::PARAM_STRING или попробуйте установить $userId на число (например, 1)

...