2016-07-22 7 views
1

Я создал временную таблицу в одном php-файле и хочу получить к ней доступ в другом php-файле. скрипты выполняются последовательно. Я использовал mysqli и добавляю p: to hostname.Постоянные соединения, которые не сохраняются между двумя сценариями php

Проблема в моем втором файле php, я не могу получить доступ к моей временной таблице. Поэтому я хотел знать, можно ли это сделать или нет? И если да, то как? Я использую сервер WAMP.

+1

Покажите нам, что вы пробовали. ** Напоминание **: Мы здесь не для создания кода для вас. – Nytrix

+1

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

+0

@Mjh, я хотел использовать временную таблицу, потому что, когда во втором скрипте я читал данные из нее и после этого ее удалял. Я думаю, что с точки зрения производительности лучше создать временную таблицу, но я могу ошибаться. –

ответ

0

Невозможно, напрямую. Временные таблицы уничтожаются, когда соединение, используемое для их установки, закрывается. Когда ваш скрипт «create» отключается, его соединение с DB закрывается, а mysql очищает - включая уничтожение этой временной таблицы.

Это означает, что когда ваш сценарий «использования» срабатывает, он получает новое соединение без каких-либо вещей, которые сделал первый скрипт.

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

Вам понадобится какой-то третий третий скрипт, который работает непрерывно, чтобы открыть соединение mysql, оставив таблицу temp на месте. И ваши два других сценария будут общаться с этим третьим.

+1

В случае с WAMP' то, что вы написали, может быть правдой, но я провел тест. Я использую 'php-fpm' с' pm.start_servers = 2' и 'pm.max_requests = 0', чтобы процесс не выходил, для целей этого теста. Я подключился к MySQL, создав постоянное соединение PDO. В терминале MySQL я проверяю, что существует установленное соединение, выдав 'SHOW PROCESSLIST \ G;', который показывает 1 соединение с идентификатором 6. Я «забиваю» мою конечную точку php, которая выполняет запрос выбора. После 500 запросов http, выдача 'SHOW PROCESSLIST \ G;' показывает одно и то же активное соединение. – Mjh

+0

, если у вас только есть один пользователь сайта, и у НИКОГДА не будет 2+ параллельных запросов на сайте, тогда у вас может быть только 1 pcon в пуле. Но как только вы запускаете параллельные скрипты с двумя скриптами, они устанавливают TWO-соединения, и теперь все ставки отключены. –

+1

Использование непостоянных соединений и выдача 'SHOW PROCESSLIST \ G;' показывает другой процесс подключения. Учитывая тот факт, что я могу ошибаться, мне хотелось бы узнать, что думают другие люди, так как я знаю, что делать поспешные тесты определенно приводит к ошибкам где-то :) – Mjh

0

От http://php.net/manual/en/mysqli.persistconns.php

Постоянное соединение Mysqli расширения, однако обеспечивает встроенный код обработки очистки. Очистка осуществляется MySQLi включает в себя:

(стоит прочитать и другие вещи, но важный бит)

  • Закрыть и падение временных таблиц

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

+0

Да, я прочитал это, но все же думал, что это будет возможно. бетонный стол с запоминающим устройством памяти? –

+0

http://dev.mysql.com/doc/refman/5.7/ru/memory-storage-engine.html – apokryfos