2012-04-18 115 views
1

我目前有一个数据库调用,它在一个区域中工作,但不是另一个区域。PHP PDO访问问题

我的数据库类标记为$ 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); 

的C有效的功能看起来像这样

 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); 

这是一个有趣的部分。我做了一个try catch,PDO抛出了没有PDO异常,它甚至不抛出一个普通的异常。错误日志中没有错误。它似乎没有工作。我已经一步一步地使用Print_r,get_classecho,然后是die;来输出我的结果,这一切都运行起来,直到我做第二次数据库调用。取回正在返回一个错误,但这只是由于执行没有运行的事实似乎

我曾尝试使用unset()除了我的主要数据库连接创建并传递到我的数据库对象时它创建

这里是发生了什么事时,脚本的链接上运行

  1. 用户点击一个随机哈希
  2. 该系统从一开始得到的哈希,然后使用该太拉来自临时数据库的用户名。
  3. 然后,它会将用户修改为已确认,删除临时条目,然后从此处返回用户名
  4. 然后调用get_user。在这种情况下,它只是返回用户信息来设置twilio子帐户。这是系统失败的地方
  5. 之后,发生了什么(而且它试图从我的测试中做到这一点,因为我在这里得到一个错误)是它访问twilio API,获取一个子帐户AUTH和SID令牌并写入它的用户文件
  6. 然后,新用户会被重定向到登录页面

我一直在使用接近光标尝试并没有奏效。

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

+0

我还没有得到您的问题的答案。但是,为什么你不使用'bindParam()'方法绑定值与转义到SQL? – stUrb 2012-04-18 19:57:49

+0

'$ info'包含什么?也许这个数组是空的。结果,第二个查询被输入'''''' – stUrb 2012-04-18 20:01:02

+0

确认工作正常,问题出在get_user上,所以$ info重新提供了正确的信息 – StevenDStanton 2012-04-19 22:53:51

回答

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']; 
}