PHP PDO 访问问题


PHP PDO Access Issue

我目前有一个数据库调用,它在一个领域工作,但不能在另一个领域工作。

我的数据库类标记为 $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_rget_classecho 逐步完成,然后是输出结果的die;,直到我进行第二次数据库调用为止,这一切都有效。提取返回错误,但这仅仅是因为 exec 似乎根本没有运行

我确实尝试在所有东西上使用unset(),除了我的主数据库连接,在创建时创建并传递到我的数据库对象中

以下是运行脚本时发生的情况

  1. 用户单击具有随机哈希的链接
  2. 系统从 GET 获取哈希,然后使用该哈希从临时数据库中提取用户名。
  3. 然后,
  4. 它会在确认时修改用户,删除临时条目,然后返回用户名
  5. 然后从这里调用get_user.在这种情况下,它只返回用户信息以设置 twilio 子帐户。这是系统失败的地方
  6. 在那之后会发生什么(它确实尝试从我的测试中执行,因为我在这里收到错误)是它访问 twilio API,获取子计数 AUTH 和 SID 令牌并将其写入用户文件
  7. 然后,新用户将重定向到登录页面

我尝试使用关闭光标,但它不起作用。

如果有人能让我了解我遇到的问题,或者我做错了什么,我将不胜感激。我是使用PDO对象的新手,所以我确定我在某处犯了一个愚蠢的错误。

我能够从PHPFreaks IRC频道的一位好人那里得到答案。

public function get_user($user){
        $stmt = $this->db->prepare('SELECT * FROM login where username = :u');
        $stmt->bindValue(':u', $user);
        $stmt->execute();
        $user_info = $stmt->fetch();
        $stmt->closeCursor();
        return $user_info;
}

public function confirm($confirm){
        $stmt = $this->db->prepare('SELECT * FROM temp_data WHERE hash = :h');
        $stmt->bindValue(':h', $confirm);
        $stmt->execute();
        $info = $stmt->fetch();
        $stmt->closeCursor();
        $stmt = $this->db->prepare('DELETE FROM temp_data WHERE username = :u');
        $stmt->bindValue(':u', $info['username']);
        $stmt->execute();
        $stmt = $this->db->prepare('UPDATE login SET confirm = '1' WHERE  username = :u');
        $stmt->bindValue(':u', $info['username']);
        $stmt->execute();
        return $info['username'];
}