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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

2294閲覧

[PHP]SQLにバインドしたデータを書き込みたいが、Invalid parameter numberを引き起こす

kalon

総合スコア198

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2016/07/20 10:11

みなさま、いつもお世話になっております。アドバイスとご指摘をお願いします。

###前提・実現したいこと
自分で作った関数を利用してSQL文に引数をバインドさせてINSERTしたい。

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

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Volumes/Transcend_Kai/Dropbox/htdocs/registerTest.php on line 48

###該当のソースコード

php

1<?php 2 3error_reporting(E_ALL); 4ini_set('display_errors', 'On'); 5 6 7function registerUser($name, $email, $password){ 8 try{ 9 $pdo = dbConnect(); 10 $sql = 'INSERT INTO users (username, email, password, login_time, create_date) VALUE (:username,:email, :password, :login_time, :created_date)'; 11 $data = array(':username' => $name,':email' => $email, ':password' => password_hash($password, PASSWORD_DEFAULT), ':login_time'=> date('Y-m-d H:i:s'), ':created_time' => date('Y-m-d H:i:s')); 12 queryPost($pdo,$sql,$data); 13 }catch(Exception $e){ 14 error_log('エラー発生 '.$e->getMessage()); 15 echo '登録に失敗しました。'; 16 } 17} 18 19/** 20* 21* @return PDO $pdoのインスタンスを生成 22*/ 23function dbConnect(){ 24 $dsn ='mysql:dbname=freemarket;host=localhost;charset=utf8'; 25 $user = 'root'; 26 $password = 'root'; 27 $option = array( 28 // SQL実行失敗時にはエラーコードのみ設定 29 PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, 30 // デフォルトフェッチモードを連想配列形式に設定 31 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 32 // バッファードクエリを使う(一度に結果セットをすべて取得し、サーバー負荷を軽減) 33 // SELECTで得た結果に対してもrowCountメソッドを使えるようにする 34 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, 35 ); 36 $pdo = new PDO($dsn,$user,$password,$option); 37 return $pdo; 38} 39 40/** 41 * @param $pdo PDO 42 * @param $sql /prepare済みのもの 43 * @param $data /バインドするもの 44 * @return mixed $stmt 45 */ 46function queryPost($pdo, $sql, $data){ 47 $stmt = $pdo->prepare($sql); 48 $stmt -> execute($data); 49 return $stmt; 50} 51 52$name = 'darekasan'; 53$email = 'test@test.com'; 54$password = 'testpass'; 55 56registerUser($name,$email,$password); 57

###試したこと
エラーメッセージをたどって同じような問題に直面した方が与えられていたアドバイスをもとに、試行錯誤をしてみましたが、
$dataにどのような値を入れればいいのか結局わからずじまいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Before

php

1$data = array(':username' => $name,':email' => $email, ':password' => password_hash($password, PASSWORD_DEFAULT), ':login_time'=> date('Y-m-d H:i:s'), ':created_time' => date('Y-m-d H:i:s'));
After

php

1$data = array(':username' => $name,':email' => $email, ':password' => password_hash($password, PASSWORD_DEFAULT), ':login_time'=> date('Y-m-d H:i:s'), ':created_date' => date('Y-m-d H:i:s'));

投稿2016/07/20 10:21

KiyoshiMotoki

総合スコア4791

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

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

kalon

2016/07/20 13:27

Typoでしたね・・・。自分で見つけられるようにこれからも頑張ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問