PHP Создание списка переменных из базы данных Mysql - PullRequest
0 голосов
/ 14 марта 2019

У меня есть база данных, которая использует для 3 языков таким образом:

id  name    de_de   al_sq
1   title   titel   titulli
2   points  punkte  pike

Теперь, когда в php $ lang установлено значение 'al_sq':

$lang = 'al_sq';

Я пытаюсь сгенерировать переменные, используя имена этого языка, в данном случае:

$langtitle = 'titulli';
$langpoints = 'pike';

Попытка что-то вроде:

$sql = "SELECT * FROM `langs`";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $lang{$row["lang"]} = $row[$lang];
  }
}

но что-то нехорошо, как генерировать эти переменные?

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Это должно быть близко к тому, что вы хотите, в зависимости от того, как представлена ​​ваша база данных. Масштабирование будет неуклюжим, если в нем будет больше заголовка и очков.

$lang = 'al_sq';
$sql = "SELECT $lang FROM 'langs'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
 while($row = $result->fetch_assoc()) {
 $langtitle = $row[1];
 $langpoints = $row[2];
 }
}
1 голос
/ 14 марта 2019

В вашем коде есть небольшая синтаксическая ошибка, которая вызывает ошибку. Что вам нужно сделать здесь:

  1. Извлечение столбцов name и al_sq из таблицы базы данных. Это делается путем выбора значения $lang (в зависимости от вашего кода). По соображениям безопасности значение $lang защищено от внедрения SQL, поскольку вы не указали, откуда это значение.

  2. Затем вы должны проверить, были ли какие-либо результаты, а в случае, если их не было, он просто завершит выполнение сценария с ошибкой.

  3. Затем, наконец, вы должны выполнить итерацию по каждой строке возвращаемых результатов и выполнить присвоение переменной переменной. Это заставит $langpoints и т. Д. Работать (и все, что вы можете добавить в будущем).

Код:

$sql = 'SELECT `name`, `' . $conn->real_escape_string($lang) . '` FROM `langs`';

$result = $conn->query($sql);

if (!$result || !$result->num_rows) {
  echo 'Invalid language selected';
  exit;
}

while ($phrase = $result->fetch_assoc()) {
  ${'lang' . $phrase['name']} = $phrase[$lang];
}

// $langtitle
// $langpoints
1 голос
/ 14 марта 2019

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

    $query = "SELECT `name`, :column as value FROM `langs`";
    $statement = $pdo->prepare($query);
    $statement->execute(["column"  => $lang]);
    $data = $statement->fetchAll(\PDO::FETCH_KEY_PAIR);

    // $data becomes an array with the name as the key:
    $langtitle = $data['title'];
    $langpoints = $data['points'];

Убедитесь, что пользователь указывает значение $lang, чтобы убедиться, что это допустимый столбецзначение.

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