如何使用PDO将PHPSESSID插入db?

时间:2015-12-09 19:53:48

标签: php mysql pdo

我正在尝试使用pdo在db中插入$ _COOKIE [' PHPSESSID'],但我有问题,有人可以帮帮忙吗?

这是db表设计:db table name:unregistered_customer_orders

session_id (int)
sel_article_id (varchar, 32)
sel_article_qty(smallint)
sel_article_color(varchar)
sel_article_size(varchar)
order_date(datetime)

这是代码

session_start();
try {
include_once'../includes/connect.inc.php'; 
$q ="INSERT INTO unregistered_customer_orders SET 
session_id = $_COOKIE['PHPSESSID'] ,
sel_article_id = :sel_article_id,
sel_article_qty =:sel_article_qty,
sel_article_color = :sel_article_color,
sel_article_size = :sel_article_size,
order_date = NOW()";
$stm = $pdo->prepare($q);
$stm->bindValue(':sel_article_id', $sel_article_id);
$stm->bindValue(':sel_article_qty', $sel_article_qty);
$stm->bindValue(':sel_article_color', $sel_article_color);
$stm->bindValue(':sel_article_size', $sel_article_size);
$stm->execute();

  if ($stm) {
    echo "Insert";
    exit();
  }
  else{
    echo "Insert failed";
    exit();
    }  
} catch (PDOException $e) {
  echo "sth got wrong with the insert".$e->getMessage();
}

1 个答案:

答案 0 :(得分:1)

您的代码存在严重的SQL注入问题!

您将未转义的SQL代码注入到查询中 - 或至少尝试从cookie中执行此操作。

cookie变量应该像其他所有内容一样进入bindValue部分。创建一个进入预准备语句部分的新变量名,并将cookie值绑定到它。

请注意,PHP可以配置为使用会话cookie的其他名称!启动会话后,您不必访问$ _COOKIE变量,只需调用session_id()函数即可获取当前使用的会话ID。

在使用session_start()之前,可以通过调用session_name()来读取配置的cookie名称。不要将cookie名称硬编码到代码中 - 当新服务器具有不同的配置时,它将难以调试错误。