Karl Heinz der zweite: PDOStatement -> Invalid parameter number ind Abfrage

Hallo,

ich hoffe ich finden den ein oder anderen der mir helfen kann und will. Ihm gehört jetzt schon mein 10000facher Dank.

ich bekomme folgende Fehlermeldung:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in 100

dort ist:

$statement->execute(array('jahr_1' => 2020,'jahr_2' => 2021,'jahr_3' => 2022, 'id_user' =>100));

Um den Fehler einzugrenzen habe ich meine SELECT Abfrage erst mal ohne die PDO Felder gemacht


$statement = $pdo->prepare("
SELECT 
a.titel, 
a.id,
a1.id_user AS id_user,
a1.jahr AS jahr_1,a1.total AS total_1,
a2.jahr AS jahr_2,a2.total AS total_2,
a3.jahr AS jahr_3,a3.total AS total_3

FROM data_field a  

LEFT JOIN data_source a1 ON a1.id_user=8 AND  a1.id_field=a.id  AND a1.jahr =2020
LEFT JOIN data_source a2 ON a2.id_user=8 AND  a2.id_field=a.id  AND a2.jahr =2021
LEFT JOIN data_source a3 ON a3.id_user=8 AND  a3.id_field=a.id  AND a3.jahr =2022


");

$statement->execute(array('jahr_1' => 2020,'jahr_2' => 2021,'jahr_3' => 2022, 'id_user' =>100));

Hier geht die Abfrage, auch wenn ich die PDO Felder nicht benutze.

Wenn ich dann anfange die einzelnen Bereich mit den PDO Felder zu ersetze wie z.B. die 2020 gegen die jahr_2

LEFT JOIN data_source a1 ON a1.id_user=8 AND  a1.id_field=a.id  AND a1.jahr =:jahr_1
LEFT JOIN data_source a2 ON a2.id_user=8 AND  a2.id_field=a.id  AND a2.jahr =2021
LEFT JOIN data_source a3 ON a3.id_user=8 AND  a3.id_field=a.id  AND a3.jahr =2022


bekomme ich folgende Meldung

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in 100

Karl Heinz

Tippfehler bitte grosszügig übersehen.

  1. Hallo,

    Wenn ich dann anfange die einzelnen Bereich mit den PDO Felder zu ersetze wie z.B. die 2020 gegen die jahr_2

    Wenn ich das Manual richtig interpretiere, kannst du nicht damit anfangen, erstmal eine Variable aus dem Array zu nehmen, sondern musst alle, in deinem Fall 4, Variablen im Array exekutieren…

    Gruß
    Kalk

    1. Hey, das kann doch wohl nicht wahr sein. Da habe ich Stunden drüber gesessen, und überall hats funktioniert.... und dann das...

      so eine verdammte (sagt man nicht) kleinigkeit....

      Danke, für das Augen öffnen.

      Karl Heinz (2)