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

Php 如何将项目从PDO数据库检索到数组中以检索字符串,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试检索用户的1-从存储在数据库中的会话令牌中只有一个具有会话令牌用户名。格式为id、代码、用户名的行。我正在尝试检索包含它的行,然后将该行存储到一个数组中,我可以检索用户名 表SQL CREATE TABLE `signup` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `username` varchar(255)

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

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

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

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

我也更喜欢参数化我的SQL

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

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

我也更喜欢参数化我的SQL

$query = "SELECT id, code, username
          FROM signup
          WHERE
          code = ?";
try {
   $stmt   = $db2->prepare($query);
   $stmt->execute(array($token));
首先,如果代码中要使用的$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
首先,如果代码中要使用的$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

您没有对SELECT的结果执行任何操作

之后

您可以使用PDOStatement::fetch检索获得的字段

其中,$row将具有id、代码和用户名键

另外,以这种方式设置SQL查询是不安全的,请使用

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

您没有对SELECT的结果执行任何操作

之后

您可以使用PDOStatement::fetch检索获得的字段

其中,$row将具有id、代码和用户名键

另外,以这种方式设置SQL查询是不安全的,请使用

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