Php PDO未插入到数据库中

Php PDO未插入到数据库中,php,mysql,insert,pdo,Php,Mysql,Insert,Pdo,希望有人能帮助我,因为我整晚都在努力解决这个小问题 我想使用PDO将数据插入数据库(无可否认,我对PDO不是最了解的)。我在使用一个我在过去使用过很多次的语句,但由于某种原因,这次它不起作用。声明如下: $userID = "Johnny5"; $sql = "INSERT INTO user_info(user_id) VALUES(:user-id)"; if($stmt = $this->_db->prepare($sql)) {

希望有人能帮助我,因为我整晚都在努力解决这个小问题

我想使用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
,而从未在我的数据库中输入任何内容。我已经尝试了我所能想到的每一个组合的变化,但是我仍然不知所措

我希望有人能指出我犯的一个非常简单的错误

此外,在
$sql
字符串中的参数
:user id
周围加上单引号是我可以将任何内容显示到数据库中的唯一方法,但这显然不会将任何实际数据输入到数据库中

编辑 我还将PDO参数类型从
PDO::PARAM_STR
更改为
PDO::PARAM_INT
,但仍然运气不佳

进一步调查后,
execute()
返回
FALSE

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

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

如果某个操作失败,则肯定是错误。首先,您需要通过检查返回值来找出哪个语句失败(请务必先阅读PHP手册中使用的每个命令)

如果找到了失败的命令,请使用查找有关具体错误的更多信息

这些信息应该能帮助你解决问题


更新:如果要处理异常(如Pekka建议的那样):

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

这样做:

:user-id
因此:

:userid

抱歉,这是我尝试的另一件事-最初我将参数设置为str,我将在上面进行编辑以反映这一点。好的catch.PDOStatement->bindParam在成功时返回TRUE,在失败时返回FALSE。PDOStatement->execute在成功时返回TRUE,在失败时返回FALSE。您可以通过检查返回值来找出哪个命令失败。您是否尝试放置:error\u reporting(E\u ALL);ini设置(“显示错误”,1);在你的脚本之上?@hakre我已经确定了execute(),失败似乎在哪里be@teuneboon,是的,错误报告已按照您的建议设置,但我没有收到进一步的警告。谢谢您的指导。希望我能解决这个问题。如果它成为解决方案,我将发布。我最终能够使用错误报告来引导我得出相同的结论。要是你早点来就好了@Nabeel。哦,好吧,迟做总比不做强:)我真希望你一发帖我就在这里。