【问题标题】:My SQL Using temporary tables with PHP without mysql_pconnectMysql 在没有 mysql_connect 的情况下使用 PHP 的临时表
【发布时间】:2009-10-01 20:59:54
【问题描述】:

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

【问题讨论】:

  • 你能发布一个你正在创建的表格的例子吗?如果我理解问题的要点,那么我认为您可以通过一个更永久的表来解决这个问题,该表描述了与某种会话密钥相关的临时结构,但我想确保我们在同一页...
  • 是的,我宁愿使用单个永久表并根据会话 ID 对其进行过滤。感谢您回来。

标签: php mysql temp-tables


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    最好创建一个永久表和临时行。因此,假设您已将包含所有半完整表单数据的对象序列化为$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 表。只需删除您认为已过期的所有内容。

    上面的代码没有经过详尽的语法错误检查。

    【讨论】:

    • 感谢您的反馈,我会尝试一下。
    猜你喜欢
    • 2021-08-24
    • 2012-02-03
    • 1970-01-01
    • 2015-12-30
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多