Tworzę sobie (w ramach nauki i do późniejszego wykorzystaniw w jakichś projektach) własny handler do bazy danych w PDO. No i chciałem sobie zrobić taką funkcję, która pozwalałaby dodać do dowolnej tabeli (określonej w $tablename) wiele wartości (wyszczególnionych w tablicy tablic $data) do kolumn(korzystałem z tej stronki, ostatni przykład na dole).
Problemem jest jednak kwestia jak odpowiednio powiązać te parametry, których liczby z góry nie jest znana. Generalnie wpadłem na to by w pętli foreach dawać do tego zmienną i dokładać ją do tablicy... ale to najwyraźniej nie działa. Mój obecny kod wygląda tak:
protected function multipleInsert($tableName, $params, $data, $conn)
{
$sql = "SELECT INTO ".$tableName." (";
$values = "VALUES (";
$sql = $sql.implode(',', $params).") ";
$values = $values.':'.implode(', :', $params).")";
$sql= $sql.$values;
echo "<br>".$sql."<br>";
$query = $conn->prepare($sql);
$count = count($params);
$bindedParams = array_fill(0, $count, null);
for($i=0; $i<$count; $i++)
{
$query->bindParam("':".$params[$i]."'", $bindedParams[$i]);
}
foreach($data as $row)
{
if($count==count($row))
{
for($i=0; $i<$count; $i++)
{
$bindedParams[$i]=$row[$i];
}
try
{
$query->execute();
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage()."<br>";
}
}
else
{
echo "Row not inserted - invalid number of data";
}
}
}
Próbowałem też dać zmienną w pętli z którą wiązałem parametr i następnie dopiero dodawać ją do początkowo pustej tablicy, ale efekt był identyczny, a był nim taki błąd:
Error: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Error: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
Error: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
(w podanym przykładzie miałem akurat 3 parametry)