Статические переменные в php сохраняются через запросы?

Чтобы понять , почему связывает имя таблицы (или столбца), не работает, вы должны понимать, как работают заполнители в подготовленных операциях: они не просто заменяются как строки (соответственно экранированные) , и результат SQL выполнен. Вместо этого СУБД, попросившая «подготовить» заявление, содержит полный план запросов о том, как он будет выполнять этот запрос, включая те таблицы и индексы, которые он будет использовать, которые будут одинаковыми независимо от того, как вы заполняете заполнители.

План для SELECT name FROM my_table WHERE id = :value будет таким же, как вы его замените :value, но похожее подобное SELECT name FROM :table WHERE id = :value невозможно спланировать, потому что СУБД не знает, какую таблицу вы собираетесь выбрать from.

Это не то, что библиотека абстракции, такая как PDO, может или должна работать, либо потому, что она победит две ключевые цели подготовленных операторов: 1) позволить базе данных заранее решить, как запрос будет запущен и будет использовать один и тот же план несколько раз; и 2) для предотвращения проблем безопасности путем отделения логики запроса от ввода переменной.

35
задан Vaibhav Kamble 6 February 2009 в 12:38
поделиться

3 ответа

Нет, в то время как статическая переменная останется для текущего запроса, необходимо будет добавить его к сессии для сохранения, это - значение через запросы.

Пример:

session_start();

class Car {
    public static $make;
    public function __construct($make) {
        self::$make = $make;
    }
}

$c = new Car('Bugatti');
echo '<p>' . Car::$make . '</p>';
unset($c);

if (!isset($_SESSION['make'])) {
    echo '<p>' . Car::$make . '</p>';
    $c = new Car('Ferrari');
    echo '<p>' . Car::$make . '</p>';
}

$_SESSION['make'] = Car::$make;

echo '<p>' . $_SESSION['make'] . '</p>';
22
ответ дан Ross 27 November 2019 в 15:46
поделиться

Статические переменные только применимы к одному единственному запросу. Если Вы хотите, чтобы данные сохранились между запросами на определенного пользователя, только используют переменные сеанса.

А хорошая работа начинающего для них расположена здесь: http://www.tizag.com/phpT/phpsessions.php

3
ответ дан Matt Razza 10 October 2019 в 13:13
поделиться

Если Вы начинаете работать со сложными наборами данных через сессии, можно хотеть изучить то, чтобы хранить данные в объектах, которые сериализируются к базе данных и вытянутые на восстановлении сессии.

Переменные в PHP не предназначены, чтобы быть персистентными. Поток Вашего приложения (стек) выполняется, начинают заканчиваться на каждой выполненной странице. Нет ничего живущего в фоновом режиме, который продолжает Вашу логику или приложение. Самой близкой вещью является сессия, но Вы не хотите хранить информацию как доступ дб и т.д. там.

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

2
ответ дан Syntax 10 October 2019 в 13:13
поделиться
Другие вопросы по тегам:

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