我正在尝试在帖子中发送表名,但这是否足够受保护?
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$naam = $_POST['naam'];
$sql = "INSERT INTO ".$naam." (".$rows.") VALUES (".$values.")";
我也试过
$naam = $db->quote($_POST['naam']);
这也不起作用。最高结果是否足够安全?
ALSO: 完整代码
它在我的数据库中插入
a1, a2 and a3: d
当
a1 = a a2 = s a3 = d
try{
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$naam = $_POST['naam'];
$sql = "
INSERT INTO ".$naam." (".$rows.")
VALUES (".$values.")
";
$stmt = $db->prepare($sql);
for ($i = $_POST['begin'] ; $i < $iets ; $i++){
$anum = 'a'.$i;
$avalue = $_POST[$anum];
$stmt->bindParam($anum, $avalue, PDO::PARAM_STR);
printf ("%s, %s||", $anum, $avalue);
}
printf ("%s, %s||", $rows, $values);
$stmt->execute();
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regel: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage();
echo '</pre>';
}
答案 0 :(得分:1)
用户可以完全控制将数据插入哪个表。而且你没有充分利用pdo。在查询中使用参数。
$sql = "INSERT INTO table_name (col1,col2) VALUES (:val1, :val2)";
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(':val1', $value1, PDO::PARAM_INT);
$stmt->bindParam(':val2', $value2, PDO::PARAM_STRING);
此处表名称是硬编码的,列也是。并且值将自动转义。