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?
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; }