如何在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;
发送到数据库。
答案 0 :(得分:1)
您似乎使用$_SESSION
有一个缓存,$_SESSION
变量并不打算这样做。它用于存储与用户相关的变量,它应该/可能是千字节值(甚至更少)。
如果您正在寻找一些缓存机制memcached,APC以及其他许多缓存机制。
还要在我的评论$_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(){
}
}