希望有人能够帮助我,因为我整晚都在试图解决这个小问题,一直在撞墙。
我想使用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参数中使用占位符是正确的。
答案 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?