質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

2501閲覧

execute() expects exactly 0 parameters, 1 given in...が出て、データがテーブルに登録されない件に関して

matsuy

総合スコア14

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2021/07/17 06:58

編集2021/07/23 06:08

前提・実現したいこと

とあるサイトを参考に、簡易的なお問い合わせフォームを作っています。
フォームに入力したデータを送信するところまでは成功しましたが、以下のエラーが出ており、送信したデータがテーブルに登録されません。
長時間トライ&エラーを繰り返していますがなかなかうまくいかないので、ご教授頂きたいです。

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

PHP Warning: mysqli_stmt::execute() expects exactly 0 parameters, 1 given in C:\MAMP\htdocs\phpstudy\questionForm.php on line 32

2021/07/23 追記
回答いただいた内容を参考にソースコードを一部修正したところ、エラーは出なくなりましたが相変わらずテーブルにレコード登録されません。

該当のソースコード

エラーが出ている箇所のソースコードは以下の通りです。

<?php session_start(); require('dbconnect.php'); if(!isset($_SESSION['join'])){ header('Location:index.php'); exit(); } if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, create_at=NOW() '); echo $ret=$statement->execute(array( $_SESSION['join']['nameSei'], $_SESSION['join']['nameMei'], $_SESSION['join']['gender'], $_SESSION['join']['year'], $_SESSION['join']['address1'], $_SESSION['join']['address2'], $_SESSION['join']['phone'], $_SESSION['join']['email'], $_SESSION['join']['question'] )); unset($_SESSION['join']); header('Location: Recieve.php'); exit(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>【練習】問い合わせフォーム</title> </head> <body> <p>【確認】お問い合わせ内容</p> <form action="" method="post"> <input type="hidden" name="action" value="submit"> <dl> <dt>お名前</dt> <dd> 姓:<?php echo htmlspecialchars($_SESSION['join']['nameSei'], ENT_QUOTES);?><br> 名:<?php echo htmlspecialchars($_SESSION['join']['nameMei'], ENT_QUOTES);?> </dd> <dt>性別</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['gender'], ENT_QUOTES);?> </dd> <dt>生年月日</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['year'], ENT_QUOTES);?>年 <?php echo htmlspecialchars($_SESSION['join']['month'], ENT_QUOTES);?>月 <?php echo htmlspecialchars($_SESSION['join']['day'], ENT_QUOTES);?>日 </dd> <dt>〒郵便番号</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['address1'], ENT_QUOTES);?> </dd> <dt>住所</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['address2'], ENT_QUOTES);?> </dd> <dt>電話番号</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['phone'], ENT_QUOTES);?> </dd> <dt>メールアドレス</dt> <dd> <?php if($_SESSION['join']['email'] == ''):?> <label>未入力</label> <?php endif; ?> <?php echo htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES);?> </dd> <dt>お問い合わせ内容</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['question']); ?> </dd> </dl> <input type="submit" value="登録する" > </form> </body> </html>

2021/07/23 追記(PHP部分を以下のように修正しました)

<?php session_start(); require('dbconnect.php'); if(!isset($_SESSION['join'])){ header('Location:index.php'); exit(); } if(!empty($_POST)){ $statement=$db->prepare('INSERT INTO question_form SET nameSei=?, nameMei=?, gender=?, year=?, address1=?, address2=?, phone=?, email=?, question=?, create_at=NOW() '); $nameSei = $_SESSION['join']['nameSei']; $nameMei = $_SESSION['join']['nameMei']; $gender = $_SESSION['join']['gender']; $year = $_SESSION['join']['year']; $address1 = $_SESSION['join']['address1']; $address2 = $_SESSION['join']['address2']; $phone = $_SESSION['join']['phone']; $email = $_SESSION['join']['email']; $question = $_SESSION['join']['question']; echo $ret=$statement->bind_param('ssssissss', $nameSei, $nameMei, $gender, $year, $address1, $address2, $phone, $email, $question); $statement->execute(); unset($_SESSION['join']); header('Location: Recieve.php'); exit(); } ?>

試したこと

このサイト内外問わず似たような質問を探し色々試しましたが、同じエラーが出続けます。
上記のエラーが出る原因の1つとして、prepare()でfalseが返ってきているから→テーブル定義で何か問題が起きているから、というコメントを見かけたので各カラムの型を見なおしたりしましたが、解消されません。念のためテーブル定義の情報も載せておきます。

# Name Type Null Extra 1 record_id int(11) No AUTO_INCREMENT 2 nameSei varchar(36) No 3 nameMei varchar(36) No 4 gender varchar(5) Yes 5 year date Yes 6 address1 int(7) No 7 address2 text No 8 phone varchar(15) No 9 email text Yes 10 question text Yes 11 create_at timestamp No

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

m.ts10806様

何度もご回答いただき、誠にありがとうございました。
エラー確認のメソッドを追加して確認したところ、テーブルのyearカラムの型が間違っていることがわかりました(date型にしていたのですが、year型に直したところレコード登録されるようになりました
)。

とりあえずレコード登録はできるようになりましたが、まだお問い合わせフォームとして不完全な部分が随所にありますので、引き続き作成に励みたいと思います(まずはエラーハンドリングの実装からですかね、、)!

投稿2021/07/25 09:08

matsuy

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/07/25 09:20

全体の設計不明ですが、あまりYear型って使わないと思います。 「どういうデータをどう扱うか」から設計見直しても良いかもしれません。
guest

0

ベストアンサー

機能の問題はドキュメント確認してください。

mysqli_stmt_execute

mysqli_stmt::execute(): bool

この通り、mysqli_stmt::execute()はパラメータを取るように実装されていません。
エラーの通りですね。

mysqli_stmt::execute() expects exactly 0 parameters, 1 given

mysqli_stmt::execute()はパラメータを0期待しているが、1与えられた(数の話)

上記ドキュメントにもサンプルコードがありますが、パラメータへの値セットはmysqli_stmt::bind_param()で行います。

投稿2021/07/17 08:34

編集2021/07/17 08:36
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsuy

2021/07/18 11:59

ご回答いただきありがとうございます。 関数の使い方が間違っていたのですね、、 添付いただいたドキュメントを参考に実装し直しましたが、今度は別のエラーが出てきてしまいました。 もう少し試行錯誤し、またはまってしまったら質問しようと思います。
m.ts10806

2021/07/19 00:35

質問は編集できますので、状況の追記を。
matsuy

2021/07/23 06:11 編集

m.ts10806様 質問を編集しました。 記載の通りエラーは出なくなったのですが、テーブルにレコード登録されません、、 prepare()とexecute()の使い方はあっていると思うのですが、何が間違っているのでしょうか、、? 恐れ入りますが、回答いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問