PDO未插入数据库

时间:2011-04-10 11:02:12

标签: php mysql insert pdo

希望有人能够帮助我,因为我整晚都在试图解决这个小问题,一直在撞墙。

我想使用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周围放置单引号是我可以获取任何内容进入数据库的唯一方法,但这显然不会输入任何实际内容数据进入数据库。

修改 我还将PDO参数类型从PDO::PARAM_STR更改为PDO::PARAM_INT,但仍然没有运气。

经过进一步调查后,execute()正在返回FALSE

解决方案 感谢大家的指导。 @Nabeel说不在PDO参数中使用占位符是正确的。

3 个答案:

答案 0 :(得分:4)

不要在SQL语句中使用破折号。

制作本:

:user-id

这样:

:userid

答案 1 :(得分:0)

$userId是此代码中的一个字符串,但您可以通过定义PDO::PARAM_INT来表示它在int中。尝试将其替换为PDO::PARAM_STRING或尝试将$userId设置为数字(例如1)

答案 2 :(得分:0)

如果出现问题,那么肯定会出现错误。首先,您需要通过检查返回值来找出哪个语句失败(始终先阅读您在PHP手册中使用的每个命令)。

如果您找到了哪个命令失败,请使用PDOStatement->errorInfo查找有关具体错误的更多信息。

该信息可以帮助您解决问题。

更新如果你想处理例外情况(正如Pekka建议的那样):How to squeeze error message out of PDO?

相关问题