【发布时间】:2012-04-18 18:29:27
【问题描述】:
我目前有一个数据库调用,它在一个区域有效,但在另一个区域无效。
我的数据库类被标记为 $database 并且将$db PDO 对象传递给数据库构造函数。
这一切都很好。
此代码调用有效
$user_info = $database->get_user($user);
这个函数被调用
public function get_user($user){
$user = $this->db->quote($user);
$query = "SELECT * FROM login where username = $user";
$user = $this->db->query($query);
$user_info = $user->fetch();
return $user_info;}
这会按预期返回用户信息
另一个电话是
$user = $database->confirm($confirm);
$user_info = $database->get_user($user);
确认函数如下所示
public function confirm($confirm){
$confirm = $this->db->quote($confirm);
$query = "SELECT * FROM temp_data WHERE hash = $confirm;";
$count = $this->db->query($query);
$info = $count->fetch();
$user = $info['username'];
$user = $this->db->quote($user);
$query = "DELETE FROM temp_data WHERE username = $user;";
$this->db->exec($query);
$query = "UPDATE login SET confirm = '1' WHERE username = $user;";
$this->db->exec($query);
return $info['username'];}
这个调用完美无缺。
它以get_user 接受的不带引号的格式返回用户名
但是get_user 失败
我已经完成了故障排除,发现问题是get_user 中的以下行没有返回任何 PDO 对象或任何数据
$user = $this->db->query($query);
这是有趣的部分。我做了一个尝试捕获,PDO 没有抛出任何 PDO 异常,它甚至没有抛出一般异常。错误日志中没有错误。它似乎不起作用。我使用Print_r、get_class 和echo 逐步完成,然后使用die; 输出我的结果,直到我进行第二次数据库调用为止。 fetch 返回一个错误,但这只是因为 exec 似乎根本没有运行
我确实尝试在所有东西上使用unset(),但我的主数据库连接是创建并在创建时传递到我的数据库对象
这是脚本运行时发生的情况
- 用户点击带有随机哈希的链接
- 系统从 GET 中获取哈希值,然后使用该哈希值从临时数据库中提取用户名。
- 然后将用户修改为已确认,删除临时条目,然后返回用户名
- 然后从这里调用
get_user。在这种情况下,它只是返回用户信息来设置 twilio 子帐户。这是系统出现故障的地方 - 在那之后发生的事情(它确实尝试从我的测试中做,因为我在这里遇到错误)是它访问 twilio API,获取子帐户 AUTH 和 SID 令牌并将其写入用户文件李>
- 然后新用户被重定向到登录页面
我尝试使用关闭光标,但没有成功。
如果有人能给我任何关于我遇到的问题或我做错了什么的见解,我将不胜感激。我是使用 PDO 对象的新手,所以我确信我在某个地方犯了一个愚蠢的错误。
【问题讨论】:
-
我没有得到您的问题的答案。但是为什么不使用
bindParam()方法绑定值和转义到sql呢? -
$info包含什么?也许这个数组是空的。因此,第二个查询被输入username是'' -
确认工作正常问题出在 get_user 所以 $info 重新运行正确的信息