получение одной ячейки из базы данных с использованием PDO - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь получить часть данных из своей базы данных, но хотел бы получить только одну ячейку, используя оператор PDO, если это возможно.

Ниже приведен скриншот таблицы

enter image description here

Имя таблицы называется отоплением

Я пытаюсь получить данные из столбца с именем 'garage' и идентификатором строки = 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 ]

3 голосов
/ 10 июня 2019

Вы можете создать белый список имен столбцов и использовать его для выбора нужного столбца.Вы можете сравнить столбец с белым списком с помощью in_array.Третий параметр очень важен, поскольку он проверяет, является ли строка строкой.Только после этого вы можете безопасно объединить SQL с вашими переменными PHP, используя оператор конкатенации 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 голос
/ 10 июня 2019

Иногда самые простые решения являются лучшими.

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;

сделает ее прямой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...