Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

171
Visualizações
PHP - Múltiples bind_params fallando

Estoy tratando de ejecutar la declaración SQL de eliminación al presionar el botón, que funcionaba si vinculaba 1 parámetro, pero quiero hacer que delete.php sea genérico, para no tener varios de ellos solo para hacer referencia a diferentes tablas:

 <?php include "header.php"; include "db.php"; $_POST['table'] = "customer"; $_POST['column'] = "cID"; $_POST['del_id'] = 26; if(isset($_POST['del_id'])) { if ($stmt = $conn->prepare("DELETE FROM customer WHERE ? = ?")) { $stmt->bind_param('si', $_POST['column'], $_POST['del_id']); $stmt->execute(); } else echo("Oops"); }

Este enlace se ejecuta pero no hace nada en la tabla, solo enlaza el valor final 'del_id', se ejecuta correctamente y enlaza 3 argumentos, incluido el nombre de la tabla, solo hace que prepare () falle.

Estoy configurando _POST vars en otros lugares de AJAX POST, arriba es solo para probar si este bit funciona o no. Tampoco me he puesto a hacer la validación todavía antes de que eso suceda.

Muy novato de PHP, probablemente un simple error, o simplemente algo de lo que no estoy al tanto, en cuyo caso sería bastante curioso saber por qué los nombres de las tablas/columnas no se pueden parametrizar, ya que me ha estado eludiendo durante algún tiempo. . Como solución alternativa, ¿funcionaría alguna forma de concatenación para poder colocar nombres dinámicos en esta consulta desde varios lugares diferentes?

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Sí, para lograr esto necesitará tener una combinación de concatenación y parámetros para la declaración preparada:

 if ($stmt = $conn->prepare("DELETE FROM " . $_POST['table'] . " WHERE " . $_POST['column'] . " = ?")) { $stmt->bind_param('si', $_POST['del_id']); $stmt->execute(); }

Asegúrese de prestar atención a las validaciones adicionales que necesitará en los nombres de las tablas y columnas. Esto debe validarse con su modelo de datos y no solo asegurarse de que sea un identificador válido. Además, eche un vistazo a algunos ORM/Generadores de consultas para aprender a desarrollar esta idea. Es un buen ejercicio de aprendizaje.

about 4 years ago · Santiago Trujillo Relatório

0

Debe validar tanto el nombre de la tabla como el nombre de la columna antes de ejecutar la eliminación.

Dado que no puede preparar los nombres de las tablas o las columnas, simplemente colóquelos en la instrucción sql antes de la preparación.

 <?php include "header.php"; include "db.php"; $_POST['table'] = "customer"; $_POST['column'] = "cID"; $_POST['del_id'] = 26; // Add code to prevent SQL injection $table = $_POST['table'] == 'customer' ? $_POST['table'] : ''; $column = $_POST['column'] == 'customer' ? $_POST['column'] : ''; if(isset($_POST['del_id']) && $table != '' && $column != '') { if ($stmt = $conn->prepare("DELETE FROM `".$table."` WHERE `".$column."` = ?")) { $stmt->bind_param('i', $_POST['del_id']); $stmt->execute(); } else echo("Oops"); }
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda