-1

好的,所以我有一个用户名的表,poke1hp,poke2hp 一直到 poke6hp 我已经做到了,所以我将表(例如 poke1hp)存储在一个 php 变量中,问题是现在我想从列中进行选择变量并获取该列中的内容。所以他就是我迄今为止所做的。

这将表名存储在 $tablename

if ($_SESSION['pickedslot'] == '1') {$tablename = "poke1hp";}
if ($_SESSION['pickedslot'] == '2') {$tablename = "poke2hp";}
if ($_SESSION['pickedslot'] == '3') {$tablename = "poke3hp";}
if ($_SESSION['pickedslot'] == '4') {$tablename = "poke4hp";}
if ($_SESSION['pickedslot'] == '5') {$tablename = "poke5hp";}
if ($_SESSION['pickedslot'] == '6') {$tablename = "poke6hp";}

然后我做一个 pdo 选择,看看我是否可以抓住列中的内容

$grabhpbaby = $db->prepare("select '$tablename' from new_battles WHERE username = ?");
$grabhpbaby->execute(array($_SESSION['username']));
$grabhpbaby2 = $grabhpbaby->fetch(); 

echo $grabhpbaby2[$tablename]; 

由于某种原因,选择正在回显 $tablename 中的列名,而不是列中的内容。我正在尝试制作一个战斗脚本,并且我将用户的 hp/life 存储在数据库中,并且我将他们在会话变量 pickslot 中选择的拾取怪物存储。因此,如果用户在怪物 1 上,那么怪物 1 的生命 / hp 将存储在 poke1hp 列的一侧,所以我试图回显那里的怪物列中曾经存在的 hp。我说过了吗if 语句工作正常,列名存储在 $tablename 中,但对于某些原因,选择回显列名,而不是列中的内容

我尝试将回声更改为

echo $grabhpbaby2[$tablename];

echo $grabhpbaby2["$tablename"];

但仍然只获取列名,而不是列中的内容

4

3 回答 3

2

发生这种情况是因为您将字段名作为文字值传递给查询。

$grabhpbaby = $db->prepare("select '$tablename' from new_battles WHERE username = ?");

你必须改变它并删除它周围的引号

$grabhpbaby = $db->prepare("select $tablename from new_battles WHERE username = ?");
于 2013-07-05T13:54:40.090 回答
0

改变这个

$grabhpbaby = $db->prepare("select '$tablename' from new_battles WHERE username = ?");

到以下

$grabhpbaby = $db->prepare("select $tablename from new_battles WHERE username = ?");
于 2013-07-05T13:55:37.563 回答
0

这是因为您需要在准备查询中正确设置占位符列:

$grabhpbaby = $db->prepare('select ' . $tablename . ' from new_battles WHERE username = ?');
$grabhpbaby->execute(array($_SESSION['username']));
$grabhpbaby2 = $grabhpbaby->fetchColumn(); 

echo $grabhpbaby2; 
于 2013-07-05T13:56:08.103 回答