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

101
Vistas
Las declaraciones preparadas de pdo salen con un número de parámetro no válido

tengo la siguiente consulta:

 $sql="INSERT INTO form_6 SET Project-name=:Project-name, Project-manager-gruppo-CDT=:Project-manager-gruppo-CDT, Short-description=:Short-description, Status=:Status, Dependency-with-BB-Pj=:Dependency-with-BB-Pj, Critical-issues=:Critical-issues"

y la siguiente matriz de datos a insertar:

 Array ( [:Project-name] => test [:Project-manager-gruppo-CDT] => jack [:Short-description] => simple project [:Status] => on going [:Dependency-with-BB-Pj] => yes [:Critical-issues] => problems trying to insert data )

y este es el código que estoy usando para ejecutar la consulta:

 try{ $stmt = $pdo->prepare($sql); $stmt->execute($values_array); } catch(PDOException $Exception){ $message=$Exception->getMessage(); $status=500; //ho avuto un problema e mi fermo die(json_encode(array('status'=>$status,'message' => $message))); }

Realmente no puedo ver por qué esto termina con la siguiente excepción:

Número de parámetro no válido: el parámetro no se definió

por lo general, esto proviene de errores tipográficos entre la consulta y la matriz o el uso del mismo marcador de posición dos veces. Pero los errores tipográficos están excluidos ya que construyo la consulta y la matriz juntas usando un foreach:

 $values_array=array(); $sql = "INSERT INTO $tabella SET "; foreach ($_POST as $key=>$value){ $sql .= $key.'=:'.$key.','; $values_array[":$key"]=$value; } $sql=rtrim($sql,','); echo $sql; //this echoes the query at the beginning of the question print_r($values_array); //this echoes the array at the beginning of the question

¿Qué me estoy perdiendo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No puede usar - en nombres de parámetros. Cuando escribe :Project-name es equivalente a :Profile - name , por lo que espera un parámetro llamado :Profile , y luego intenta restar el name de la columna de eso.

Reemplace el - con _ en el marcador de posición.

Además, si el nombre de una columna contiene - , debe colocar el nombre entre comillas graves. Consulte Cuándo usar comillas simples, comillas dobles y acentos graves en MySQL

 $values_array=array(); $sql = "INSERT INTO $tabella SET "; foreach ($_POST as $key=>$value){ $placeholder = str_replace('-', '_', $key); $sql .= "`$key` = :$placeholder,"; $values_array[":$placeholder"]=$value; }
over 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