2016-05-31 69 views
5

我有一个应用程序通过我的PHP变量(nomecardapioBD,它接收并记录在变量中:nomecardapioBD),这是我想要选择所有行和列的表名。PHP,MY SQL错误查询

但是通过帖子接收变量无法进行预约。任何人都可以告诉我这部分代码出了什么问题?

$query = "Select * FROM :nomecardapioBD "; 

    $query_params = array(
     ':nomecardapioBD' => $_POST['nomecardapioBD'] 
    ); 

//execute query 
try { 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute($query_params); 
} 
catch (PDOException $ex) { 
    $response["success"] = 0; 
    $response["message"] = "Database Error!"; 
    die(json_encode($response)); 
} 

// Finally, we can retrieve all of the found rows into an array using fetchAll 
$rows = $stmt->fetchAll(); 
+2

表名和列名不能由PDO中的参数替换。 – Saty

回答

2

表名和列名不能由PDO中的参数替换。只用它作为

$table=$_POST['nomecardapioBD']; 
$query = "Select * FROM $table"; 


//execute query 
try { 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute(); 
} 
catch (PDOException $ex) { 
    $response["success"] = 0; 
    $response["message"] = "Database Error!"; 
    die(json_encode($response)); 
} 
+1

它也工作得很好,非常感谢你的真实 –

+0

你应该被投票关闭这个问题,而不是发布导致SQL注入的不安全的答案。 –

3

为什么不这样做?

$query = "Select * FROM " . $_POST['nomecardapioBD']; 


//execute query 
try { 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute(); 
} 
catch (PDOException $ex) { 
    $response["success"] = 0; 
    $response["message"] = "Database Error!"; 
    die(json_encode($response)); 
} 

// Finally, we can retrieve all of the found rows into an array using fetchAll 
$rows = $stmt->fetchAll(); 

你也应该做一些输入消毒。

+1

它的工作,非常感谢真正的 –

+0

这个答案是一个SQL注入本身。不知道为什么这么多upvoted。 –

+0

@YourCommonSense我不是故意提供行业标准解决方案。我向OP展示了一种解决他的问题的方法。我最后发表声明,建议他不要面临危险。 – hashbrown