2014-12-07 69 views
1

我想从存储在数据库中的会话令牌检索用户的(1 - 将只有一个与会话令牌)用户名。该行格式为ID,代码,用户名。我试图检索包含该行,然后将行存储到一个数组,我可以检索用户名。如何检索项目从PDO数据库到数组检索字符串

表SQL

CREATE TABLE `signup` (

    `id` int(11) NOT NULL AUTO_INCREMENT, 

    `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 

    `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 

    PRIMARY KEY (`id`), 

    UNIQUE KEY `code` (`code`) 

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; 

表信息

id code   username 
1 123-145-546-48 CallumCarmicheal 

我一直在测试

$db2 = new PDO("mysql:host={$mysql_host};dbname={$mysql_database};charset=utf8", $mysql_user, $mysql_password, $options); 

$token = "123-145-546-48"; 

$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = $token 
    "; 

try { 
    $stmt = $db2->prepare($query); 
    $stmt->execute(); 
} catch (PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 


// return the Username from getting the token 
return ... 

我不能算出这个当前的代码,它可能是简单的,但我做了一个注册系统,需要一个管理员生成会话代码并设置用户名,在注册表中它会显示用户名,用户可以输入他的电子邮件和密码。这将检索用户名,但我试过的每一个会返回一个空白字符串或只是不会返回任何东西。用户注册后,会话令牌将被删除。

回答

2

首先,如果多数民众赞成$code打算在code要使用的VARCHAR/TEXT,你应该用引号把它包。

但既然你准备,只是将其绑定:

$token = "callumc"; 

// add a named placeholder for preparation 
$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = :code 
    "; 

try { 
    $stmt = $db2->prepare($query); 
    // bind it 
    $stmt->execute(array(':code' => $token)); 
} catch (PDOException $ex) { 
    die("Failed to run query: " . $ex->getMessage()); 
} 

然后,如果你希望得到的东西这一点,你需要获取的结果:

$results = $stmt->fetch(PDO::FETCH_ASSOC); 
echo $results['username']; // and others 
3

您需要在运行查询后获取结果。

http://php.net/manual/en/pdostatement.fetch.php

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
echo $result['username']; // or do whatever you want with the username 

我也喜欢用参数我的SQL。

$query = "SELECT id, code, username 
      FROM signup 
      WHERE 
      code = ?"; 
try { 
    $stmt = $db2->prepare($query); 
    $stmt->execute(array($token)); 
2

你对SELECT的结果没有做任何事情。

$stmt->execute(); 

您可以PDOStatement::fetch()

$row = $stmt->fetch(); 

检索得到的领域在哪里$row将有idcodeusername键。


此外,设置您的SQL查询的方式是不是安全,而是使用类似

$query = " 
    SELECT 
     id, 
     code, 
     username 
    FROM signup 
    WHERE 
     code = ? 
    "; 
// ... 
$stmt->execute(array($token));