## 前提

画像投稿掲示板を PHP, MySQL で作っています。  
`posting.php` が投稿ページで、そのデータを `thanks.php` で受け取り、画像等一覧を  
`index.php` として表示したいです。  
※ 今は仮として `thanks.php` に一覧を表示できるようしてます。

* * *

## 発生している問題・エラーメッセージ

> Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number:
> number of bound variables does not match number of tokens in
> /var/www/html/php_kadai/php_kadai09/thanks.php on line 16

データベースを見てもデータがinsertされていません・・・

```

    <?php
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>画像投稿掲示板</title>
      <link rel="stylesheet" href="reset.css">
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
    <h1>画像投稿掲示板</h1>
    <hr>
    <p class="posting"><a href="posting.php">画像を投稿する</a></p>
    <h2>投稿内容一覧</h2>
    
    </body>
    </html>
    
```

```

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>画像投稿ページ</title>
      <link rel="stylesheet" href="reset.css">
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
    <h1>画像投稿掲示板</h1>
    <hr>
    <form class="contents" action="thanks.php" method="post" enctype="multipart/form-data">
    <table border="0" cellspacing="0" cellpadding="0" class="table_basic">
    
    <colgroup>
      <col width="33%" />
      <col width="67%" />
    </colgroup>
    
      <tr>
        <th><span>投稿者</span><span class="must">必須</span></th>
        <td ><input type="text" name="name" value="" class="box">
        </td>
      </tr>
    
      <tr>
        <th><span>画像タイトル</span><span class="must">必須</span></th>
        <td><input type="text" name="title" value="" class="box"></td>
      </tr>
    
      <tr>
        <th><span>画像ファイル</span><span class="must">必須</span></th>
        <td><input type="file" name="uploadfile" value="選択してください"><br><span class="attension">（※png, jpgのみ対応）</span></td>
      </tr>
    
    </table>
    <p class="button"><input type="submit" name="submit" value="投稿する" width="50px"></p>
    </form>
    <p class="link"><a href="index.php">画像一覧ヘージはこちら>></a></p>
    </body>
    </html>
    
```

```

    <?php
    require_once('functions.php');
    
    $name = $_POST['name'];
    $title = $_POST['title'];
    
    $dbh = connectDb();
    
    $sql = "insert into posts (create_at datetime, name, image_name, img_data) values
            (now(), :name, :title, :movetofile)";
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(":name", $name);
    $stmt->bindParam(":title", $title);
    $stmt->bindParam(":movetofile", $movetofile);
    
    $stmt->execute();
    
    //echo '成功しました';
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>投稿完了ページ</title>
      <link rel="stylesheet" href="reset.css">
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
    
      <h1>画像投稿掲示板</h1>
      <hr>
    <div id="wrapper">
      <p class="title">下記の内容で投稿致します</p>
    
      <p>投稿者：
        <?php if(empty($name)) :?>
          <?php echo "<p style='color:red;'>投稿者が入力されておりません。</p>"; ?>
        <?php else: ?>
          <?php echo h($name); ?>
        <?php endif; ?>
      </p>
    
      <p class="imagestitle">画像タイトル：
        <?php if(empty($title)) :?>
          <?php echo "<p style='color:red;'>画像タイトルが入力されておりません。</p>"; ?>
         <?php else: ?>
          <?php echo h($title); ?>
        <?php endif; ?>
      </p>
    <p>画像ファイル：
    <?php if(strlen($_FILES["uploadfile"]["name"]) > 0 ) :?>
      <?php $fileinfo = pathinfo($_FILES["uploadfile"]["name"]); ?>
      <?php $fileext = strtoupper($fileinfo["extension"]); ?>
      <?php $errmsg = ""; ?>
    <?php if ($fileext != "PNG" and $fileext != "JPG") :?>
      <?php $errmsg .= "<p style='color:red;'>対象ファイルはPNGまたはJPGのみです！</p><br>"; ?>
    <?php else: ?>
      <?php $movetofile = "images/upf_" . $_FILES["uploadfile"]["name"]; ?>
        <?php if (! move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $movetofile)) :?>
          <?php $errmsg .= "<p style='color:red;'>ファイルのアップロードに失敗しました。</p><br>"; ?>
        <?php endif; ?>
    <?php endif; ?>
    
    <?php if ($errmsg == "") :?>
      <?php echo $_FILES["uploadfile"]["name"] . "<br>"; ?>
      <?php echo "<img src='$movetofile'><br><br><br>"; ?>
    <?php else: ?>
      <?php echo $errmsg . "<br><br><br>"; ?>
      <?php @unlink($_FILES["uploadfile"]["tmp_name"]); ?>
    <?php endif; ?>
    <?php else: ?>
      <?php echo "<p style='color:red;'>アップロードするファイルが指定されていません！</p><br>"; ?>
    <?php endif; ?>
    
    </p>
      <p class="return"><a href="posting.php">画像投稿ページへ戻る>></a></p>
      <p class="link"><a href="index.php">画像一覧ヘージはこちら>></a></p>
    </div>
    </body>
    </html>
    
```

[![ターミナルキャプチャー](https://i.stack.imgur.com/pAAYu.png)](https://i.stack.imgur.com/pAAYu.png)
CC BY-SA 4.0
2015-11-15T05:32:41.780
18836
2019-05-04T20:40:41.833
2019-05-04T20:40:41.833
32986
7176
question
php mysql
Warning: PDOStatement::execute(): SQLSTATE[HY093]のエラー