mickie1230
@mickie1230

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHP7からPHP8への移行に伴うエラーについて

解決したいこと

mysqlとPHP7にてデータベースを作成していましたが、PHP8への対応作業を始めています。
この過程においてエラーが発生しました。
PHP7では動作していたのですがPHP8では動作しません。いくつか原因があるようですが特定できず困っています。

おそらく根本的なミスだとは思うのですが、どうかご教示いただけますと幸いです。

発生している問題・エラー

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in test4034.php(30): PDOStatement->execute() #1 {main} thrown in test4034.php on line 30

該当するソースコード

<?php
$number = $_GET["番号"]; 

$sql = "SELECT 番号, 更新日, 内容 FROM 更新履歴 WHERE 番号 = $number";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':番号', $_GET["番号"], PDO::PARAM_INT);
$stmt->execute();                        //ここが怪しい
$member = $stmt->fetch(PDO::FETCH_OBJ); 
?>

<form action="test4035.php" method="post">
<table>
<tr>
<td valign="top"><input type="text" size = 2 name="number" placeholder="番号" value="<?php print($member->番号) ?>"></td>
<td valign="top"><input type="text" size = 10 name="day" placeholder="更新日" value="<?php print($member->更新日) ?>"></td>
<td valign="top"><textarea type="text" cols=80 rows=3 name="item" placeholder="内容"><?php print($member->内容) ?></textarea></td>
</tr></table>
<button id="send" type="submit">データベースを更新</button><input type="button" onclick="history.back()" value="戻る">
</form>

PHP7での表示
スクリーンショット 2025-03-06 7.33.56.png

自分で試したこと

ソースコード中、「ここが怪しい」と記載してる部分でエラーが発生しているようで、エラーの表示が出るのみです。
試しに該当する一文を削除すると一応の表示が出るのですが、それぞれの入力項目にまたエラーの表示が出てきます。

0

1Answer

確証はないのですが、次のように変更してみてはどうでしょうか。

-$sql = "SELECT 番号, 更新日, 内容 FROM 更新履歴 WHERE 番号 = $number";
+$sql = "SELECT 番号, 更新日, 内容 FROM 更新履歴 WHERE 番号 = :番号";

もしくは、

-$sql = "SELECT 番号, 更新日, 内容 FROM 更新履歴 WHERE 番号 = $number";
+$sql = "SELECT 番号, 更新日, 内容 FROM 更新履歴 WHERE 番号 = :number";
$stmt = $dbh->prepare($sql);
-$stmt->bindValue(':番号', $_GET["番号"], PDO::PARAM_INT);
+$stmt->bindValue(':number', $_GET["番号"], PDO::PARAM_INT);
```
1Like

Comments

  1. @mickie1230

    Questioner

    ありがとうございます、後者の方で問題なく動作しました。
    ありがとうございます。

Your answer might help someone💌