2011-04-10 120 views
2

希望有人能够帮助我,因为我整夜都在试图解决这个小问题。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_STRPDO::PARAM_INT但仍然没有运气。

经过进一步调查,​​正在返回FALSE

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

+0

PDOStatement-> bindParam返回TRUE或FALSE的成功失败。 PDOStatement-> execute在成功时返回TRUE,在失败时返回FALSE。您可以通过检查返回值来找出哪个命令失败。 – hakre 2011-04-10 11:09:43

+0

您是否尝试过放置:error_reporting(E_ALL); ini_set('display_errors',1);在脚本的顶部? – teuneboon 2011-04-10 11:10:01

+0

@hakre我已经确定execute()的失败似乎是 – ServAce85 2011-04-10 11:19:25

回答

4

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

使此:

:user-id 

就象这样:

:userid 
+0

我终于能够使用错误报告引导我得出同样的结论。如果只有你早点来过@Nabeel。哦,好,从来没有比从未更好:) – ServAce85 2011-04-10 11:53:43

+0

我希望我能在你发布你的问题后一直在这里。 – Nabeel 2011-04-10 11:58:59

0

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

+0

对不起,这是我尝试的另一件事 - 最初我将参数设置为str,我将在上面进行编辑以反映这一点。接得好。 – ServAce85 2011-04-10 11:08:06

0

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

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

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

更新:如果你要处理的异常(如佩卡建议):How to squeeze error message out of PDO?

+0

感谢您的指导。希望我能解决这个问题。如果问题得到解决,我会发布 – ServAce85 2011-04-10 11:24:49

+0

@ ServAce85 - 我相信你会尽快解决它。 – hakre 2011-04-10 11:29:43