我正在尝试从数据库中获取一条数据,但是如果可能的话,我只想使用PDO语句获取一个单元格。
下面是表格的屏幕截图
表名叫加热
我正在尝试从名为'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];
答案 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;
将使其变得直线