1

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

我的数据库类被标记为 $database 并将$dbPDO 对象传递给数据库构造函数。

这一切都很好。

此代码调用有效

$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_classechoadie;来输出我的结果,这一切都可以正常工作,直到我进行第二次数据库调用。fetch 正在返回一个错误,但这只是因为 exec 似乎根本没有运行

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

这是脚本运行时发生的情况

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

我曾尝试使用关闭光标,但没有奏效。

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

4

1 回答 1

1

我能够从 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'];
}
于 2012-05-09T13:50:09.827 回答