会话表到数据库?

时间:2009-11-24 09:07:41

标签: php database

如何在PHP中将session[table]发送到数据库?

就像那样:

session_start();
session_register('table');
$qty=$_POST[txtQty];
$pid=$_REQUEST[pid];
$data=@mysql_query("SELECT * from products where productid=".$pid,$con) or die(mysql_error());
$table=$_SESSION[table];
while($row=@mysql_fetch_array($data))
{   
    $table.='<tr><td>'.$row[name].'></td>
<td>'.$row[price].'</td><td>'.$qty.'</td><td>'.$row[price]*$qty.'</td>
<td>Delete</td></tr>';
    $_SESSION[table]=$table; 
}

我想将$_SESSION[table]=$table;发送到数据库。

3 个答案:

答案 0 :(得分:1)

您似乎使用$_SESSION有一个缓存,$_SESSION变量并不打算这样做。它用于存储与用户相关的变量,它应该/可能是千字节值(甚至更少)。

如果您正在寻找一些缓存机制memcachedAPC以及其他许多缓存机制。

还要在我的评论$_SESSION[table]中注明会产生警告,您应该添加$_SESSION['table']之类的引号。

使用最高级别的警告(即error_reporting(E_ALL);)进行开发也是一种很好的做法,它可以帮助您更轻松地找到可能的错误/问题。

要将$_SESSION['table']放回数据库中,您必须以某种方式将其存储为数组,然后循环认为该数组并执行后续的INSERT查询。

祝你好运

答案 1 :(得分:1)

我不太清楚意图是什么,但如果你想修改会话的工作方式,你需要定义自己的会话功能并用session_set_save_handler()设置它们。

答案 2 :(得分:1)

您可以修改和使用此类,它会将会话保留在DB

class MySQLSession
{
  protected $resource = null;
  protected $db = 'base';
  protected $table = 'session';
  protected $id_col = 'sess_id';
  protected $data_col = 'sess_data';
  protected $time_col = 'sess_time';

  public function __construct($context, $parameters = null){
    session_set_save_handler(array($this, 'sessionOpen'),
                             array($this, 'sessionClose'),
                             array($this, 'sessionRead'),
                             array($this, 'sessionWrite'),
                             array($this, 'sessionDestroy'),
                             array($this, 'sessionGC'));

    session_start();
  }

  public function sessionClose(){
    return true;
  }

  public function sessionDestroy($id){
    $id = mysql_real_escape_string($id, $this->resource);
    $sql = 'DELETE FROM '.$this->table.' WHERE '.$this->id_col.' = \''.$id.'\'';
    if (@mysql_query($sql, $this->resource)){
      return true;
    }
    $error = 'MySQLSessionStorage cannot destroy session id "%s"';
    $error = sprintf($error, $id);
    throw new Exception($error);
  }

  public function sessionGC($lifetime){
    $sql = 'DELETE FROM '.$this->table.' '.
           'WHERE '.$this->time_col.' + INTERVAL '.$lifetime.' SECOND < NOW()';
    if (@mysql_query($sql, $this->resource)){
      return true;
    }
    $error = 'MySQLSessionStorage cannot delete old sessions';
    throw new Exception($error);
  }

  public function sessionOpen($path, $name){
    $this->resource = mysql_connect('host', 'user', 'pass', true);
    mysql_select_db($this->db, $this->resource);
    return true;
  }

  public function sessionRead($id){
    $id = mysql_real_escape_string($id, $this->resource);

    $sql = 'SELECT '.$this->data_col.' ' .
           'FROM '.$this->table.' ' .
           'WHERE '.$this->id_col.' = \''.$id.'\'';
    $result = @mysql_query($sql, $this->resource);
    if ($result != false && @mysql_num_rows($result) == 1){
      $data = mysql_fetch_row($result);
      return $data[0];
    }else{
      $sql = 'INSERT INTO '.$this->table.' ('.$this->id_col.', ' .
             $this->data_col.', '.$this->time_col.') VALUES (' .
             '\''.$id.'\', \'\', NOW())';

      if (@mysql_query($sql, $this->resource)){
        return '';
      }
      $error = 'MySQLSessionStorage cannot create new record for id "%s"';
      $error = sprintf($error, $id);
      throw new Exception($error);
    }
  }

  public function sessionWrite($id, &$data){
    $id   = mysql_real_escape_string($id, $this->resource);
    $data = mysql_real_escape_string($data, $this->resource);
    $sql = 'UPDATE '.$this->table.' ' .
           'SET '.$this->data_col.' = \''.$data.'\', ' .
           $this->time_col.' = NOW() ' .
           'WHERE '.$this->id_col.' = \''.$id.'\'';

    if (@mysql_query($sql, $this->resource)){
      return true;
    }
    $error = 'MySQLSessionStorage cannot write session data for id "%s"';
    $error = sprintf($error, $id);
    throw new Exception($error);
  }

  public function shutdown(){
  }
}
相关问题