Php 受保护的PDO表名

Php 受保护的PDO表名,php,pdo,Php,Pdo,我正试图在帖子中发送表名,但这是否受到足够的保护 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $naam = $_POST['naam']; $sql = "INSERT INTO ".$naam." (".$rows.") VALUES (".$values.")"; 我也

我正试图在帖子中发送表名,但这是否受到足够的保护

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);                                                                   
$naam = $_POST['naam']; 
$sql = "INSERT INTO ".$naam." (".$rows.") VALUES (".$values.")";
我也试过了

$naam = $db->quote($_POST['naam']);
这也不管用。最高结果是否足够安全

此外: 完整代码

它在我的数据库中插入

a1、a2和a3:d

什么时候

a1=a a2=s a3=d

试试看{
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$naam=$_POST['naam'];
$sql=”
插入“$naam.”(“$rows.”)
值(“.$VALUES.”)
";                                                              
$stmt=$db->prepare($sql);
对于($i=$\u POST['begin'];$i<$iets;$i++){
$anum='a'.$i;
$avalue=$\u POST[$anum];
$stmt->bindParam($anum、$avalue、PDO::PARAM_STR);
printf(“%s,%s | |,$anum,$avalue);
}
printf(“%s,%s | |,$rows,$values);
$stmt->execute();
}                                                                       
捕获(PDO$e)
{                                                                       
回声';
$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); 
回显“Regel:”。$e->getLine()。
$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); 
回显“Bestand:”。$e->getFile()。
$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); 
回显“Foutmelding:”。$e->getMessage();
$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); 
回声';
$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); 
}
用户可以完全控制将数据插入到哪个表中。你没有充分利用pdo。在查询中使用参数


这里的表名是硬编码的,列也是硬编码的。值将自动转义。

用户完全可以控制将数据插入哪个表。你没有充分利用pdo。在查询中使用参数


这里的表名是硬编码的,列也是硬编码的。值将自动转义。

不,这不安全,
naam=用户我想要什么--
(1)永远不要让用户决定查询的表名(2)永远不要让用户决定查询的表名(3)如果必须,在已知集合中列出表名(4)使用参数,而不是字符串生成。不,这不安全,
naam=用户我想要什么--
(1)永远不要让用户为您的查询决定一个表名(2)永远不要让用户为您的查询决定一个表名(3)如果必须,请将已知集合中的表名列为白名单(4)使用参数,而不是字符串生成。