嘿,我有这个表结构:
使用此代码,我想获得三个变量中的id,用户名和点击次数:
$stmt = $dbh->prepare("SELECT username FROM tracker WHERE username='".$data."'");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
$id = $row['0'];
$username = $row['1'];
$clicks = $row['2'];
我的结果:
$id // slkdflskdfskd
$username // null
$clicks // null
我的问题,为什么?我做错了什么?..
答案 0 :(得分:3)
您只检索用户名列。
$stmt = $dbh->prepare("SELECT username FROM tracker WHERE username='".$data."'");
您应该将其更改为包含您要使用的所有列:
$stmt = $dbh->prepare("SELECT id, username, clicks FROM tracker WHERE username='".$data."'");
此外,如果你想更清洁一点,你应该获取一个相关的数组。这样,您就可以按列名称解析$row
。
更改
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
到
$row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_LAST);
然后您可以从行中选择列:
$row['username'] //slkdflskdfskd
答案 1 :(得分:2)
您只需在SELECT
语句中指定这些数据库列:
$stmt = $dbh->prepare("SELECT id, username, clicks FROM tracker WHERE username='".$data."'");
您也可以使用*
选择全部,但这不是最佳做法,因为数据库结构总是随时间而变化。这有点懒。返回数组中的数据顺序可能与您分配的变量顺序不匹配。等等......无论如何,你应该知道,如果你想要返回所有列,你可以这样做:
"SELECT * FROM tracker WHERE username='".$data."'"