title: PDO: Invalid parameter number: number of bound variables does not match number of tokens
body: <p>I've been breaking my head over the following. </p>
  
  <p>What you can see below is the result of a dynamically build INSERT together with its BINDS. The column names and tokens are being pulled from the table. I do not know them in advance. So I use build in functions to know what they are. The values are posted to me via a form. I put both together using an associative array which I use to build the INSERT command.</p>
  
  <p>The array looks like this:</p>
  
  <pre><code>Array
  (
      [id] =&gt; 0
      [datum] =&gt; 1968-05-13 16:58:02
      [titel] =&gt; test 369
      [categorie] =&gt; catEGORIE
      [tekst] =&gt; tekst
      [zichtbaar_bijlage] =&gt; 1
      [zichtbaar_foto_1] =&gt; 1
      [zichtbaar_foto_2] =&gt; 1
      [zichtbaar_foto_3] =&gt; 1
      [zichtbaar_foto_4] =&gt; 1
      [zichtbaar_foto_5] =&gt; 1
      [zichtbaar_foto_6] =&gt; 1
      [zichtbaar_foto_7] =&gt; 1
      [zichtbaar_foto_8] =&gt; 1
      [zichtbaar_foto_9] =&gt; 1
      [zichtbaar_foto_10] =&gt; 1
      [bijlage] =&gt; verkeersbord.jpg
      [foto_1] =&gt; hummel.jpg
      [foto_2] =&gt; reinoutgerolf.jpg
      [foto_3] =&gt; hummel.jpg
      [foto_4] =&gt; verkeersbord.jpg
      [foto_5] =&gt; verkeersbord.jpg
      [foto_6] =&gt; 20140511vlaggen.jpg
      [foto_7] =&gt; verkeersbord.jpg
      [foto_8] =&gt; 20140511vlaggen.jpg
      [foto_9] =&gt; verkeersbord.jpg
      [foto_10] =&gt; 50-euro-1024x545.jpg
  )
  </code></pre>
  
  <p>A dump of the INSERT command and the BINDS looks like this:</p>
  
  <pre><code>INSERT INTO some_DB.some_table (NIE_id, NIE_datum, NIE_titel, NIE_categorie, NIE_tekst, NIE_zichtbaar_bijlage, NIE_zichtbaar_foto_1, NIE_zichtbaar_foto_2, NIE_zichtbaar_foto_3, NIE_zichtbaar_foto_4, NIE_zichtbaar_foto_5, NIE_zichtbaar_foto_6, NIE_zichtbaar_foto_7, NIE_zichtbaar_foto_8, NIE_zichtbaar_foto_9, NIE_zichtbaar_foto_10, NIE_bijlage, NIE_foto_1, NIE_foto_2, NIE_foto_3, NIE_foto_4, NIE_foto_5, NIE_foto_6, NIE_foto_7, NIE_foto_8, NIE_foto_9, NIE_foto_10) VALUES (:id, :datum, :titel, :categorie, :tekst, :zichtbaar_bijlage, :zichtbaar_foto_1, :zichtbaar_foto_2, :zichtbaar_foto_3, :zichtbaar_foto_4, :zichtbaar_foto_5, :zichtbaar_foto_6, :zichtbaar_foto_7, :zichtbaar_foto_8, :zichtbaar_foto_9, :zichtbaar_foto_10, :bijlage, :foto_1, :foto_2, :foto_3, :foto_4, :foto_5, :foto_6, :foto_7, :foto_8, :foto_9, :foto_10)
  $STH3-&gt;bindValue(':id', 0);
  $STH3-&gt;bindValue(':datum', 1968-05-13 16:58:02);
  $STH3-&gt;bindParam(':titel', test 369, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':categorie', catEGORIE, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':tekst', tekst, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_bijlage', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_1', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_2', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_3', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_4', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_5', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_6', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_7', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_8', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_9', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':zichtbaar_foto_10', 1, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':bijlage', verkeersbord.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_1', hummel.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_2', reinoutgerolf.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_3', hummel.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_4', verkeersbord.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_5', verkeersbord.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_6', 20140511vlaggen.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_7', verkeersbord.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_8', 20140511vlaggen.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_9', verkeersbord.jpg, PDO::PARAM_STR);
  $STH3-&gt;bindParam(':foto_10', 50-euro-1024x545.jpg, PDO::PARAM_STR);
  </code></pre>
  
  <p>The INSERT command is generated by the following:</p>
  
  <pre><code>$command = "INSERT INTO $_SESSION[database].$table ($fields) VALUES ($arguments)";
              echo $command;
              $STH3 = $DBH-&gt;prepare($command);
  
  
              foreach($binds_array as $key =&gt; $value)
                  {
                      if ($key == "id")
                          {
                              $STH3-&gt;bindValue(':id', 0);
                              echo "&lt;br&gt;--- STH3-&gt;bindValue(':id', 0);&lt;br&gt;";
                          }
                          elseif ($key == "datum")
                          {
                              $STH3-&gt;bindValue(':$key', $value);
                              echo "--- STH3-&gt;bindValue(':$key', $value);&lt;br&gt;";
                          }
                          else
                          {
                              $STH3-&gt;bindParam(':$key', $value, PDO::PARAM_STR);
                              echo "--- STH3-&gt;bindParam(':$key', $value, PDO::PARAM_STR);&lt;br&gt;";
                          };
                  };
  </code></pre>
  
  <p>For some reason this is resulting in an error:</p>
  
  <blockquote>
    <p>Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter
    number: number of bound variables does not match number of tokens</p>
  </blockquote>
  
  <p>I've been reading up on whatever I could find on this problem but I'm not able to pinpoint the problem. As far as I can see (but I might be blind) the number of tokens and the number of variables is the same.</p>
  
  <p>Any ideas?</p>