我正在尝试从存储在数据库中的会话令牌中检索用户(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 ...
我无法理解这一点,它可能很简单,但我制作了一个注册系统,需要管理员生成会话代码并设置用户名,在注册表单中它会显示用户名,用户可以输入他的电子邮件和密码。这将检索用户名,但我尝试过的每一个都会返回一个空白字符串,或者只是不会返回任何内容。用户注册后,会话令牌将被删除。
答案 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
将包含id
,code
和username
个键。
此外,以这种方式设置SQL查询并不安全,而是使用类似
的内容$query = "
SELECT
id,
code,
username
FROM signup
WHERE
code = ?
";
// ...
$stmt->execute(array($token));