Invalid parameter numberについて教えてください。
解決したいこと
気づけばプロ並みPHP改訂版という参考書を参考にして在庫管理アプリを作っています。
在庫の修正情報力入力(画像1)→内容チェック(画像2)→DB反映するところでエラーが発生(画像3)
エラーについて調べたところ引数が異なるとのことでしたが、確認した限りでは引数の間違えは見当たりませんでした。
他にどこか怪しい箇所があれば教えて頂きたいです。
発生している問題・エラー
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
該当するソースコード
stock_edit_check.php(入力内容をチェック)
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
print'ログインされません。<br />';
print'<a href="../user_login/login_form.html">ログイン画面へ</a>';
exit();
}
else
{
print $_SESSION['user_name'];
print'さんログイン中<br />';
print'<br />';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>在庫修正</title>
</head>
<body>
<?php
require_once('../common/common.php');
$post=sanitize($_POST);
if (!empty($_POST['stock_id']))
{
$stock_id=$_POST['stock_id'];
}
$stock_purchase_date=$_POST['purchase_date'];
$stock_deadline=$_POST['deadline'];
$stock_name=$_POST['stock_name'];
$stock_price=$_POST['price'];
$stock_number=$_POST['number'];
$stock_gazou_name_old=$_POST['gazou_name_old'];
$stock_gazou=$_FILES['gazou'];
if($stock_gazou['size']>0)
{
if($stock_gazou['size']>1000000)
{
print'画像が大き過ぎます。';
}
else
{
move_uploaded_file($stock_gazou['tmp_name'],'./gazou/'.$stock_gazou['name']);
print'<img src="./gazou/'.$stock_gazou['name'].'">';
print'<br />';
}
}
if($stock_purchase_date=='')
{
print '購入日が入力されていません。<br />';
}
else
{
print '購入日 :';
print $stock_purchase_date;
print '<br />';
}
if($stock_deadline=='')
{
print '消費期限が入力されていません。<br />';
}
else
{
print '消費期限:';
print $stock_deadline;
print '<br />';
}
if($stock_name=='')
{
print '商品名が入力されていません。<br />';
}
else
{
print '商品名 :';
print $stock_name;
print '<br />';
}
if(preg_match('/\A[0-9]+\z/',$stock_price)==0)
{
print '価格をきちんと入力してください。<br />';
}
else
{
print '価格 :';
print $stock_price;
print '円<br />';
}
if($stock_number=='')
{
print '数量が入力されていません。<br />';
}
else
{
print '数量 :';
print $stock_number;
print '<br />';
}
if($stock_name=='' || preg_match('/\A[0-9]+\z/',$stock_price)==0 || $stock_gazou['size']>1000000)
{
print '<form>';
print '<input type="button" onclick="history.back()" value="戻る">';
print '</form>';
}
else
{
print '上記のように変更します。<br />';
print '<form method="post" action="stock_edit_done.php">';
if(isset($stock_id))
{
print '<input type="hidden" name="stock_id" value="'.$stock_id.'">';
}
print '<input type="hidden" name="purchase_date" value="'.$stock_purchase_date.'">';
print '<input type="hidden" name="deadline" value="'.$stock_deadline.'">';
print '<input type="hidden" name="stock_name" value="'.$stock_name.'">';
print '<input type="hidden" name="price" value="'.$stock_price.'">';
print '<input type="hidden" name="number" value="'.$stock_number.'">';
print '<input type="hidden" name="gazou_name_old" value="'.$stock_gazou_name_old.'">';
print '<input type="hidden" name="gazou_name" value="'.$stock_gazou['name'].'">';
print '<br />';
print '<input type="button" onclick="history.back()" value="戻る">';
print '<input type="submit" value="OK">';
print '</form>';
}
?>
</body>
</html>
stock_edit_done.php(チェック画面から受け取ってDBに反映)
<?php
session_start();
session_regenerate_id(true);
if(isset($_SESSION['login'])==false)
{
print'ログインされません。<br />';
print'<a href="../user_login/login_form.html">ログイン画面へ</a>';
exit();
}
else
{
print $_SESSION['user_name'];
print'さんログイン中<br />';
print'<br />';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>在庫修正</title>
</head>
<body>
<?php
try
{
require_once('../common/common.php');
$post=sanitize($_POST);
if (!empty($_POST['stock_id']))
{
$stock_id=$_POST['stock_id'];
}
if (!empty($_POST['purchase_date']))
{
$stock_purchase_date=$_POST['purchase_date'];
}
if (!empty($_POST['deadline']))
{
$stock_deadline=$_POST['deadline'];
}
if (!empty($_POST['stock_name']))
{
$stock_name=$_POST['stock_name'];
}
if (!empty($_POST['price']))
{
$stock_price=$_POST['price'];
}
if (!empty($_POST['number']))
{
$stock_number=$_POST['number'];
}
if (!empty($_POST['gazou_name_old']))
{
$stock_gazou_name_old=$_POST['gazou_name_old'];
}
if (!empty($_POST['gazou_name']))
{
$stock_gazou_name=$_POST['gazou_name'];
}
$dsn='mysql:dbname=user;host=localhost;charset=utf8';
$user='yusei';
$password='rogin1111';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='UPDATE stocks SET purchase_date=?,deadline=?,stock_name=?,price=?,number=?,gazou=? WHERE stock_id=?';
$stmt=$dbh->prepare($sql);
if(isset($stock_purchase_date))
{
$data[]=$stock_purchase_date;
}
if(isset($stock_deadline))
{
$data[]=$stock_deadline;
}
if(isset($stock_name))
{
$data[]=$stock_name;
}
if(isset($stock_price))
{
$data[]=(int)$stock_price;
}
if(isset($stock_number))
{
$data[]=(int)$stock_number;
}
if(isset($stock_gazou_name))
{
$data[]=$stock_gazou_name;
}
if(isset($stock_id))
{
$data[]=(int)$stock_id;
}
$stmt->execute($data);
$dbh=null;
if($stock_gazou_name_old!=$stock_gazou_name)
{
if($stock_gazou_name_old!='')
{
unlink('./gazou/'.$stock_gazou_name_old);
}
}
print '修正しました。<br />';
}
catch(Exception$e)
{
echo "エラー発生:" . htmlspecialchars($e->getMessage(),ENT_QUOTES, 'UTF-8') . "<br>";
print'ただいま障害により大変ご迷惑をお掛けしております。';
exit();
}
?>
<form action="list.php">
<input type="submit" value="戻る">
</form>
</body>
</html>
自分で試したこと
各配列の引数間違えの確認。
0