すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

PHPからSQLをINSERTしたいのですが、少し戸惑っています。解決策をよければ教えて頂けると幸いです。ソースは長いので、OSDNというサイトにコピペしました。

master_employee
NO 論理名 物理名 データ型 NOT NULL
1 社員ID id integer Yes
2 保険番号 cd character varying(3) Yes
3 姓 last_name character varying(20) Yes
4 姓カナ last_name_kana character varying(40)
5 名 first_name character varying(20) Yes
6 名カナ first_name_kana character varying(40)
7 郵便番号 zipcode character varying(8)
8 住所 address character varying(255)
9 電話番号 tel character varying(18)
10 携帯電話番号 mobile character varying(18)
11 メールアドレス mail_address character varying(255)
12 削除フラグ delete_flag character(1) Yes
13 登録者 regist_user character varying(255)
14 登録日時 regist_date timestamp without time zone
15 更新者 update_user character varying(255)
16 更新日時 update_date timestamp without time zone



master_zipcode
No 論理名 物理名 データ型
1 JISコード jiscode character varying(255)
2 旧郵便番号 zipcode_old character varying(255)
3 郵便番号 zipcode character varying(255)
4 都道府県名カナ pref_kana character varying(255)
5 住所1カナ city_kana character varying(255)
6 住所2カナ street_kana character varying(255)
7 都道府県名 pref character varying(255)
8 住所1 city character varying(255)
9 住所2 street character varying(255)
10 flag1 integer
11 flag2 integer
12 flag3 integer
13 flag4 integer
14 flag5 integer
15 flag6 integer

master_zipcodeのzipcodeをmaster_employeeのzipcodeに入れたいので、

$insert_date = date( 'Y/m/d H:i:s' ) ; //現在日付と現在時刻の日付型。

$update_date = date( 'Y/m/d H:i:s' ) ; //現在日付と現在時刻の日付型。

$params = array( ':id' => '1'
, ':cd' => '111'
, ':last_name' => '大島'
, ':last_name_kana' => 'オオシマ'
, ':first_name' => '渚'
, ':first_name_kana' => 'ナギサ'
, ':zipcode' => NULL
, ':address' => '神奈川県川崎市川崎区大島'
, ':tel' => '000-0000-0000'
, ':mobile' => '100-0000-0000'
, ':mail_address' => 'nagi-oo.rrr.jp'
, ':delete_flag' => '0'
, ':regist_user' => '大島渚'
, ':regist_date' => $insert_date
, ':update_user' => NULL
, ':update_date' => NULL
);

$sql = " INSERT INTO master_employee " ; //↑で適当に入れたデータのINSERTを行うSQL。

//パラメータの数に応じてプレースホルダを用意する
$ph = $conn->trimPlaceholder( $params ) ;

//パラメータがないときは条件にしない
if( $ph != '' ){ //ベースのSQLに条件文を結合

$sql .= " ( id , cd , last_name , last_name_kana , first_name , first_name_kana , zipcode , address , tel , mobile , mail_address , delete_flag , regist_user , regist_date , update_user , update_date ) VALUES ( :id , :cd , :last_name , :last_name_kana , :first_name , :first_name_kana , (SELECT zipcode FROM master_zipcode WHERE concat(master_zipcode.pref , master_zipcode.city , master_zipcode.street ) = :address ) , :address , :tel , :mobile , :mail_address , :delete_flag , :regist_user , :regist_date , :update_user , :update_date ) ";

}

$result = $conn->executeQueryFetchAll( $sql , $params ) ;

以上のような式を書きましたが、結果は

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: :zipcode
db_connection.php on line 89

となりました。どこを直せばいいでしょうか。サイトを見ながらやっても、特に方法が分かりません。具台的な解決策や初心者にも分かりやすい参考サイト等があれば教えて頂けると幸いです。よろしくお願いいたします。

  • 質問者:yyu
  • 質問日時:2016-10-26 22:23:57
  • 0
ソーシャルブックマークに登録する:

とくネタ総合ランキング

すべてを見る

トクネタを投稿する

Sooda!からのお知らせ

一覧を見る