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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

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回答

6087閲覧

php関数内でのSQL実行と外部ファイル呼び出し

zer0root

総合スコア28

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

0グッド

0クリップ

投稿2015/11/06 01:54

お世話になっております。
前回こちらでPDOを使ってインサートのコードのレクチャーをいただいたのですが
今回は前回(下記)のものを使用して以下のことを行いたいと考えています。

  • 1, "lib/function.php" に DBに登録をするfunctionを作成する
  • 2, "/form/hoge.php" 内で、1で作成したfunctionを呼び出してDBに登録する。

上記のことを行いたいのですが、前回もPDOについて多くの指摘等いただきましたがまだ理解が乏しく

Fatal error: Call to a member function prepare() on a non-object in~~~~~~~~
というエラーになってしまいます。
ご教示お願い致します。

lang

1 2//function.php 3 4 5<?php 6function Insert(){ 7 try { 8 $pdo = new PDO('mysql:host=localhost;dbname=form_test;charset=utf8', 'user name', 'password'); 9 10 11 $sql = "INSERT INTO `form`("; 12 $sql .= "`id`"; 13 $sql .= ", `company_name`"; 14 $sql .= ", `company_unit`"; 15 $sql .= ", `name`"; 16 $sql .= ", `name_furigana`"; 17 $sql .= ", `mail_address`"; 18 $sql .= ", `tel1`"; 19 $sql .= ", `tel2`"; 20 $sql .= ", `tel3`"; 21 $sql .= ", `fax1`"; 22 $sql .= ", `fax2`"; 23 $sql .= ", `fax3`"; 24 $sql .= ", `postal_code1`"; 25 $sql .= ", `postal_code2`"; 26 $sql .= ", `zip`"; 27 $sql .= ", `address`"; 28 $sql .= ", `contact_us`"; 29 $sql .= ") VALUES ("; 30 $sql .= "NULL"; 31 $sql .= ", :company_name"; 32 $sql .= ", :company_unit"; 33 $sql .= ", :name"; 34 $sql .= ", :name_furigana"; 35 $sql .= ", :mail_address"; 36 $sql .= ", :tel1"; 37 $sql .= ", :tel2"; 38 $sql .= ", :tel3"; 39 $sql .= ", :fax1"; 40 $sql .= ", :fax2"; 41 $sql .= ", :fax3"; 42 $sql .= ", :postal_code1"; 43 $sql .= ", :postal_code2"; 44 $sql .= ", :zip"; 45 $sql .= ", :address"; 46 $sql .= ", :contact_us"; 47 $sql .= ")"; 48 49 50 51 $arr = []; 52 $arr[':company_name'] = $_SESSION['company']; 53 $arr[':company_unit'] = $_SESSION['company']; 54 $arr[':name'] = $_SESSION['name']; 55 $arr[':name_furigana'] = $_SESSION['name2']; 56 $arr[':mail_address'] = $_SESSION['email']; 57 $arr[':tel1'] = $_SESSION['tel1']; 58 $arr[':tel2'] = $_SESSION['tel2']; 59 $arr[':tel3'] = $_SESSION['tel3']; 60 $arr[':fax1'] = $_SESSION['fax1']; 61 $arr[':fax2'] = $_SESSION['fax2']; 62 $arr[':fax3'] = $_SESSION['fax3']; 63 $arr[':postal_code1'] = $_SESSION['zip1']; 64 $arr[':postal_code2'] = $_SESSION['zip2']; 65 $arr[':zip'] = $_SESSION['prefecture']; 66 $arr[':address'] = $_SESSION['address']; 67 $arr[':contact_us'] = $_SESSION['message']; 68 69 } catch (\PDOException $e) { 70 var_dump($e); 71} 72 } 73 74?> 75

lang

1 2//hoge.php 3 4<?php 5 6require_once('./lib/function.php'); 7 8$stmt = $pdo->prepare($sql); 9$stmt->execute($arr); 10 11?> 12 13 14 15

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

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

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

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

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

guest

回答1

0

ベストアンサー

2点、修正する必要があります。

  1. hoge.php内の以下2行は、function.phptry句の中に移動してやる必要がある。

php

1 try { 2 ... 3 $arr[':contact_us'] = $_SESSION['message']; 4 5 $stmt = $pdo->prepare($sql); 6 $stmt->execute($arr); 7 } catch (PDOException $e) { // クラス名の頭の"/"は不要 8 ...
  1. function.phpの内容は関数化してあるので、require_onceした後に関数Insertを呼び出してやる必要がある。

php

1require_once('./lib/function.php'); 2 3Insert();

投稿2015/11/06 02:10

KiyoshiMotoki

総合スコア4791

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

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

zer0root

2015/11/06 02:19

2行の部分はtryの中に元々あったのですが試行錯誤してる内になにを思ったのかhoge.phpに移動してました..... レクチャーありがとうございます。無事実装できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問