我的SQL在没有mysql_pconnect的情况下使用带有PHP的临时表

时间:2009-10-01 20:59:55

标签: php mysql temp-tables

我想在PHP代码中使用临时表。这是一个将被邮寄的表格。我确实使用会话变量和数组,但填写的一些数据必须以表格格式存储,并且用户必须能够在拼写错误的情况下删除条目等。使用数组执行此操作可能会起作用(不确定)但我有点新在PHP和使用表似乎更简单。我的问题是使用mysql_connect创建表并添加数据行,但是当我添加我的第二行时,它会删除表并再次创建它...使用mysql_pconnect的工作方式是不删除表,但创建的表比实例更多时间并删除条目?真是一团糟!我怎样才能最好地使用临时表,而不是在我的页面刷新时让它们下垂?如果用户关闭页面并将表保留在数据库中,则不使用临时表可能会导致其他问题。

2 个答案:

答案 0 :(得分:1)

听起来像一团糟!我不确定你为什么要使用临时表,但你可以创建一个随机表名并将其分配给会话变量。但这是非常错误的,因为每个用户都有一张桌子!

如果必须使用数据库,请在名为sessionID的表中添加字段。当你插入/删除引用php sessionid时。

只是将数据存储在会话中可能要容易得多......

答案 1 :(得分:1)

最好创建永久表和临时行。因此,假设您已将包含所有半完整表单数据的对象序列化为$form_data。在脚本的最后,应该发生的最后一件事是$ form_date应该存储到数据库中,结果行id存储在$ _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表。只需删除您认为已过期的所有内容。

上述代码尚未彻底检查语法错误。