Мой SQL Использование временных таблиц с PHP без mysql_pconnect - PullRequest
0 голосов
/ 02 октября 2009

Я хочу использовать временные таблицы в своем коде PHP. Это форма, которая будет отправлена ​​по почте. Я использую переменные и массивы сеансов, но некоторые заполненные данные должны храниться в табличном формате, и пользователь должен иметь возможность удалять записи в случае опечаток и т. Д. Выполнение этого с массивами может работать (не уверен), но я новичок на PHP и использование таблиц кажется намного проще. Моя проблема заключается в том, что использование mysql_connect создает таблицу и добавляет строку данных, но когда я добавляю свою вторую строку, она удаляет таблицу и создает ее снова ... Использование mysql_pconnect работает, не удаляя таблицу, но создает больше, чем в экземпляре таблицы в раз и удаление записи? какой беспорядок! Как я могу лучше всего использовать временные таблицы и не удалять их при обновлении моей страницы? неиспользование временных таблиц может вызвать другие проблемы, если пользователь закрывает страницу и оставляет таблицу в базе данных.

Ответы [ 2 ]

1 голос
/ 02 октября 2009

Лучше создать постоянную таблицу и временные строки. Итак, скажем, вы сериализовали объект, содержащий все ваши полунаполненные данные формы, как $form_data. В конце сценария последнее, что должно произойти, это то, что $ form_date должен быть сохранен в базе данных, а итоговый идентификатор строки сохранен в вашем $ _SESSION. Что-то вроде:

$form_data=serialize($form_object); //you can also serialize arrays, etc.
//$form_data may also need to be base64_encoded

$q="INSERT INTO incomplete_form_table(thedata) '$form_data'";    
$r=mysqli->query($q);
$id=$mysql->last_insert_id;
$_SESSION['currentform']=$id;

Затем, когда вы переходите на следующую страницу, вы воссоздаете свою форму следующим образом:

$q="SELECT thedata FROM incomplete_form_table WHERE id={$_SESSION['currentform']}";
$r=$mysql->query($q);
$form_data=$r->fetch_assoc();
$form=$form_data['thedata'];//if it was base64_encoded, don't forget to unencode it first

Вы можете (автоматически) очищать таблицу incomplete_form_data периодически, если в таблице есть поле метки времени. Просто удалите все, что вы считаете истекшим.

Приведенный выше код не был тщательно проверен на наличие синтаксических ошибок.

1 голос
/ 02 октября 2009

Звучит как беспорядок! Я не уверен, почему вы вообще используете временную таблицу, но вы можете создать случайное имя таблицы и присвоить его переменной сеанса. Но это очень неправильно, поскольку у вас есть таблица для каждого пользователя!

Если вам необходимо использовать базу данных, добавьте поле в таблицу с именем sessionID. Когда вы делаете вставку / удаление ссылки на php sessionid.

Просто сохранить данные в сеансе, вероятно, было бы намного проще, хотя ...

...