@toster_users

Как использовать имя переменной как строку таблицы PHP PDO?

Здравствуйте.

В таблице 'test' есть строки
tab0
tab1
tab2
...
tabn
Если переменная $j = 1, то необходимо данные вставить в таблицу tab1, если 0, то в tab0 и т.д.
Подскажите, пожалуйста. Как использовать строки таблицы как имя переменной php

$rows =$bd->exec("INSERT INTO test (tab".'{$j}'.") VALUES ('$nomer')");
  • Вопрос задан
  • 3063 просмотра
Решения вопроса 1
nowm
@nowm
Вот так:

$rows = $bd->exec("INSERT INTO test (tab$j) VALUES ('$nomer')");

У вас не срабатывает текущий вариант из-за того, что вы пишете так: '{$j}'. Дело в том, что в одиночных кавычках подстановка значения переменной не происходит. Для подстановки значения нужно использовать двойные кавычки. Я проиллюстирую:

$variable = 'John';

echo 'Hello, $variable'; // Выведет: Hello, $variable
echo "Hello, $variable"; // Выведет: Hello, John

Так же, судя по вашему коду, под tab0 и tab1 подразумеваются названия полей в таблице test, а не названия отдельных таблиц tab0 и tab1.

И, под конец: несмотря на то, что вы используете PDO, вы зачем-то пихаете значение переменной в строку запроса напрямую, как это делается при использовании mysql_query(); Это ни на грамм не добавляет безопасности такому запросу. Почитайте про подготовленные запросы в PDO. Если не ошибаюсь, вот такая конструкция может сработать:

$st = $bd->prepare("INSERT INTO test (tab$j) VALUES (?)");
$st->execute(array($nomer));
$rows = $st->rowCount();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@toster_users Автор вопроса
Спасибо большое за грамотное объяснение, работает. Изначально делал так
$rows = $bd->exec("INSERT INTO test (tab$j) VALUES ('$nomer')");
и по какой-то причине не срабатывало.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Удивительно, что никто не написал, что так НЕ НАДО делать.
А надо купить себе учебник по реляционным СУБД, узнать, наконец, что это такое, и попробовать впервые в жизни спроектировать БД грамотно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы