Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda