2016-05-31 25 views
5

Ho un'applicazione che passa per il mio PHP una variabile (nomecardapioBD e che ha ricevuto e registrato nella variabile: nomecardapioBD) che è il nome della tabella che voglio selezionare tutte le righe e le colonne .PHP, MY SQL query di errore

Ma per ricevere la variabile via posta non è possibile effettuare l'appuntamento. Qualcuno può dirmi cosa c'era di sbagliato in questa parte del mio codice?

$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

I nomi di tabella e colonna non possono essere sostituiti dai parametri in PDO. – Saty

risposta

2

I nomi di tabella e colonna non possono essere sostituiti dai parametri in PDO. Basta usarlo come

$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

Ha funzionato troppo, grazie mille per davvero –

+0

Avresti dovuto votare per chiudere questa domanda invece di pubblicare una risposta non sicura che porta all'iniezione SQL. –

3

Perché no?

$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(); 

Si dovrebbe anche fare una sorta di sanitizzazione dell'input.

+1

Ha funzionato, grazie mille per vero –

+0

Questa risposta è un'iniezione SQL stessa. Mi chiedo perché sia ​​stato così pubblicizzato. –

+0

@YourCommonSense Non intendevo fornire una soluzione standard del settore. Ho mostrato all'OP un modo per risolvere il suo problema. E ho fatto l'ultima dichiarazione per suggerirlo contro il pericolo. – hashbrown