Количество параметров, которые вы определяете в запросе, должно соответствовать количеству параметров, которые вы связываете.
Вам потребуется дважды зациклить свои данные: один раз для динамического построения оператора sql (что вы можете затем prepare
), а затем второй раз для привязки параметров, прежде чем наконец вызвать execute
.
Вот адаптация вашего кода, демонстрирующая принцип:
$cols = "";
$vals = "";
foreach( $splitHeader as $element ) {
if( strlen($element) > 0 ) {
if ( strlen($cols) > 0 ) {
$cols .= ", ";
$vals .= ", ";
}
$cols .= $element;
$vals .= "?";
}
}
$sql = "INSERT INTO " . $row1["rand"] . " (". $cols . ") VALUES(". $vals . ")";
echo $sql;
$sth = $conn->prepare($sql);
$i = 1;
foreach($splitHeader as $element){
if( strlen($element) > 0 ) {
$sth->bindParam( $i, $_POST[$element] );
$i++;
}
}
$sth->execute();