QA@IT

PHPでMYSQLにデータ追加ができません。

1499 PV

擬似ショッピングサイトを製作中なのですが、PHPでMYSQLにデータを追加することができません。
以下のエラーが出ます。
「Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\sakuhin\sql.php:50 Stack trace: #0 C:\xampp\htdocs\sakuhin\sql.php(50): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\sakuhin\sql.php on line 50」

XAMPPのMYSQLでは「返り値が空でした (行数 0)。 (Query took 0.0022 seconds.)」と出てきます。

ちなみに、コードはこう書いています。↓
<!DOCTYPE html>

PHP基礎

<?php
{
$color=$_POST['color'];
$name=$_POST['name'];
$suuryou=$_POST['suuryou'];
$year=$_POST['year'];
$month=$_POST['month'];
$day=$_POST['day'];
$tel=$_POST['tel'];
$email=$_POST['email'];
$yuubin=$_POST['yuubin'];
$yuubin2=$_POST['yuubin2'];
$todouhuken=$_POST['todouhuken'];
$juusyo=$_POST['juusyo'];
$juusyo0=$_POST['juusyo0'];
$juusyo1=$_POST['juusyo1'];

    print $color;
    print $name;
    print $suuryou;
    print $year;
    print $month;
    print $day;
    print $tel;
    print $email;
    print $yuubin;
    print $yuubin2;
    print $todouhuken;
    print $juusyo;
    print $juusyo0;
    print $juusyo1;

    $dsn = 'mysql:dbname=sakuhin;host=localhost;charset=utf8';
    $user='root';
    $password='';
    $dbh=new PDO($dsn,$user,$password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

    $sql='INSERT INTO kounyuu(color,name,suuryou,year,month,day,tel,email,yuubin,yuubin2,todouhuken,juusyo,juusyo0,juusyo1) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
    $stmt=$dbh->prepare($sql);
    $data[]=$name;

    $stmt->execute($data);

    $dbh=null;
}

?>

データをちゃんと送れているか確認するために、エラーの出てるページでprint文で文字を出力しています。
ちゃんと文字が出るので、データはちゃんと送れていると考えているのですが…

どのあたりを見直せばいいでしょうか?
解答お願いします。

回答

単純にexecuteで渡しているのがパラメータクエリーの(valuesの)パラメータ数と違うからでは?

$data[]=$name;
$stmt->execute($data);

これでは$nameの値しか渡してないですよね?

Invalid parameter number: number of bound variables does not match number of tokens
無効なパラメータ番号:バインドされた変数の数がトークンの数と一致しません

Googleの翻訳でも構わないのでエラーメッセージはちゃんと読みましょう。

編集 履歴 (1)

単純にexecuteで渡しているのがパラメータクエリーの(valuesの)パラメータ数と違うからでは?

$data[]=$name;
$stmt->execute($data);

これでは$nameの値しか渡してないですよね?

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。