我正在尝试使用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();
}
答案 0 :(得分:1)
您的代码存在严重的SQL注入问题!
您将未转义的SQL代码注入到查询中 - 或至少尝试从cookie中执行此操作。
cookie变量应该像其他所有内容一样进入bindValue
部分。创建一个进入预准备语句部分的新变量名,并将cookie值绑定到它。
请注意,PHP可以配置为使用会话cookie的其他名称!启动会话后,您不必访问$ _COOKIE变量,只需调用session_id()
函数即可获取当前使用的会话ID。
在使用session_start()
之前,可以通过调用session_name()
来读取配置的cookie名称。不要将cookie名称硬编码到代码中 - 当新服务器具有不同的配置时,它将难以调试错误。