使用PDO从数据库获取单个单元格

时间:2019-06-09 21:26:59

标签: php database pdo

我正在尝试从数据库中获取一条数据,但是如果可能的话,我只想使用PDO语句获取一个单元格。

下面是表格的屏幕截图

enter image description here

表名叫加热

我正在尝试从名为'garage'的列中获取数据,行ID = 3

我尝试了很多方法,但是一直失败。以下是我到目前为止的内容,但是由于某种原因仅返回了列名称车库。

我使用的是以下名称,我叫车库

$room = 'garage';

require_once "connect.php";

$sql = 'SELECT :name FROM heating WHERE id = 3';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':name', $room);
$stmt->execute();

$sw = $stmt->fetch();
echo $sw[0];

如果我执行以下操作,我会给我正确的结果,但我想用一个变量代替车库

$sql = 'SELECT garage FROM heating WHERE id = 3';
$stmt = $pdo->prepare($sql);
$stmt->execute();

$sw = $stmt->fetch();
echo $sw[0];

2 个答案:

答案 0 :(得分:3)

您可以创建列名的白名单,并使用它来选择正确的列。您可以借助in_array在白名单上检查该列。第三个参数非常重要,因为它检查字符串是否为字符串。然后,您只能使用PHP concatenation operator安全地将SQL与PHP变量连接在一起。为了达到良好的效果,如果您的任何列名是保留字或包含特殊字符,则列名应放在反引号`中。

$whiteListOfHeating = [
    'keyName',
    'den',
    'WC1',
    'hallway',
    'garage'
];

$room = 'garage';
if (in_array($room, $whiteListOfHeating, true)) {
    $sql = 'SELECT `'.$room.'` FROM heating WHERE id = 3';
    $stmt = $pdo->prepare($sql);
    // ...
} else {
    echo 'Invalid column name specified!';
}

答案 1 :(得分:1)

有时候最简单的解决方案是最好的。

require_once "connect.php";

$room = 'garage';

$sql = 'SELECT * FROM heating WHERE id = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([3]);
$sw = $stmt->fetch();

echo $sw[$room];

此外,每次您需要这样的功能时,这意味着您的数据库结构很可能是错误的。房间应该是行,而不是列

require_once "connect.php";

$room = 'garage';

$sql = 'SELECT value FROM heating_room WHERE heating_id=3 and room = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$room]);
$sw = $stmt->fetchColumn();

echo $sw;

将使其变得直线