如何将项目从PDO数据库检索到数组以检索字符串

时间:2014-12-07 04:57:54

标签: php mysql pdo

我正在尝试从存储在数据库中的会话令牌中检索用户(1 - 只有一个带有会话令牌的用户名)。格式为id,code,username的行。我正在尝试检索包含该行的行,然后将该行存储到一个我可以检索用户名的数组中。

表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 ...

我无法理解这一点,它可能很简单,但我制作了一个注册系统,需要管理员生成会话代码并设置用户名,在注册表单中它会显示用户名,用户可以输入他的电子邮件和密码。这将检索用户名,但我尝试过的每一个都会返回一个空白字符串,或者只是不会返回任何内容。用户注册后,会话令牌将被删除。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:2)

首先,如果$code将在code使用$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()); } 那是VARCHAR / TEXT,那么你应该用引号包装它。

但是,既然你正在准备,只需绑定它:

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

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

{{1}}

答案 2 :(得分: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));