2016-05-31 67 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