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

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

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

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

Q&A

解決済

2回答

3511閲覧

phpでのエラー

userones

総合スコア30

PHP

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

0グッド

0クリップ

投稿2017/02/18 14:50

編集2017/02/18 15:03

$Swich = "WHERE";

$SQL = <<<SQL
SELECT * FROM 顧客マスタ
SQL;

/SQL作成/
if ($顧客名 != ""){
$SQL .= " {$Swich} 顧客名 LIKE '{$顧客名}' ";
//スイッチをANDにする
$Swich = "AND";
//array追加
//array_push($query,$顧客名);
}

if ($企業名 != ""){
$SQL .= " {$Swich} 企業名 LIKE '{$企業名}' ";
//スイッチをANDにする
$Swich = "AND";
//array追加
//array_push($query,$企業名);
}

if ($担当者 != ""){
$SQL .= " {$Swich} 担当者 LIKE '{$担当者}' ";
//スイッチをANDにする
$Swich = "AND";
//array追加
//array_push($query,$担当者);
}
/SQL作成/

try {

$PDO = new PDO($dns,$id,$pass);

$stmt = $PDO->query($SQL);

$HTML = "NO-DATA";

//LINE51行目↓
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){

$HTML = <<<HTML

<tr> <td></td> <td>[KIGYO]</td> <td>[Yubin]</td> <td>[Jyusyo]</td> <td>[tantou]</td> <td>[syosai]</td> </tr> HTML;

}

echo $HTML;

}catch(PDOException $e){
echo $e;
}

---ERROR
Fatal error: Call to a member function fetch() on boolean in C:\xampp\htdocs\kokyaku\php\kokyaku.php on line 51

上記のエラーがでて困っています。調べてみたのですが、いまいち同じことが起きている感じの記事がなくて困っています...

SQLコードを確認して、phpmyadminで実行してみたところ
SQLは通ることを確認しております。

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

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

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

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

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

kei344

2017/02/18 15:59

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

ベストアンサー

Fatal error: Call to a member function fetch() on boolean in

このメッセージから読み取れるのは、「fetch()関数は、 boolean のメンバではありません。」となります。

php

1$stmt->fetch(PDO::FETCH_ASSOC)

ここでエラーになっているのは、$stmt が boolean(true / false) になっているということです。

php

1$stmt = $PDO->query($SQL);

この部分で $stmt に値が、 true または false になっているということです。

http://php.net/manual/ja/pdo.query.php

PDO::query() は、PDOStatement オブジェクトを返します。 失敗した場合は FALSE を返します。

実際は、以上のことから、$stmt は false になっているはず。
ということは、

php

1$PDO->query($SQL);

でコケているということ。
$SQL が意図したクエリになっているかどうかを確認しましょう。

投稿2017/02/18 16:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ヒアドキュメントの部分に余分な文字が入っていると思うのですが、いかがでしょうか?
また、SQL文などより詳細な情報があったほうが回答が得られやすくなると思います。

PHP

1<?php 2ini_set('display_errors', true); 3error_reporting(E_ALL); 4try { 5 6 $PDO = new PDO($dns, $id, $pass); 7 8 $stmt = $PDO->query($SQL); 9 10 $HTML = "NO-DATA"; 11 12//LINE51行目↓ 13 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 14$HTML = <<<HTML 15<tr> 16<td></td> 17<td>[KIGYO]</td> 18<td>[Yubin]</td> 19<td>[Jyusyo]</td> 20<td>[tantou]</td> 21<td>[syosai]</td> 22</tr> 23HTML; 24 } 25 26 echo $HTML; 27 28} catch (PDOException $e) { 29 echo $e->getMessage(); 30}

追記を受けて

SQLのヒアドキュメントの部分にも余分な空白が入っているようでしたが、いかがでしょうか。

PHP

1<?php 2ini_set('display_errors', true); 3error_reporting(E_ALL); 4$Swich = "WHERE"; 5 6$SQL = <<<SQL 7SELECT * FROM 顧客マスタ 8SQL; 9 10/*SQL作成*/ 11if ($顧客名 != "") { 12 $SQL .= " {$Swich} 顧客名 LIKE '{$顧客名}' "; 13//スイッチをANDにする 14 $Swich = "AND"; 15//array追加 16//array_push($query,$顧客名); 17} 18 19if ($企業名 != "") { 20 $SQL .= " {$Swich} 企業名 LIKE '{$企業名}' "; 21//スイッチをANDにする 22 $Swich = "AND"; 23//array追加 24//array_push($query,$企業名); 25} 26 27if ($担当者 != "") { 28 $SQL .= " {$Swich} 担当者 LIKE '{$担当者}' "; 29//スイッチをANDにする 30 $Swich = "AND"; 31//array追加 32//array_push($query,$担当者); 33} 34/*SQL作成*/ 35 36try { 37 38 $PDO = new PDO($dns, $id, $pass); 39 40 $stmt = $PDO->query($SQL); 41 42 $HTML = "NO-DATA"; 43 44//LINE51行目↓ 45 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 46 47$HTML = <<<HTML 48<tr> 49<td></td> 50<td>[KIGYO]</td> 51<td>[Yubin]</td> 52<td>[Jyusyo]</td> 53<td>[tantou]</td> 54<td>[syosai]</td> 55</tr> 56HTML; 57 58 } 59 60 echo $HTML; 61 62} catch (PDOException $e) { 63 echo $e->getMessage(); 64}

投稿2017/02/18 14:56

編集2017/02/18 15:07
s8_chu

総合スコア14731

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

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

userones

2017/02/18 15:05

ヒアドキュメントの部分をコピペしてみましたが、同じエラーがでました... SQL文の作成方法を追加しました!アドバイスありがとうございます
userones

2017/02/18 15:21

SQLのヒアドキュメント部分の空白も取り除きました。 大きくソースコードをかきかえたのですが、次は、データが0件で返ってくるようになりました...
s8_chu

2017/02/18 15:23

どのように書き換えたのでしょうか?
userones

2017/02/18 15:26

<?php include "config.php"; $顧客名 = $_POST["顧客名"]; $企業名 = $_POST["企業名"]; $担当者 = $_POST["担当者"]; $query = array(); $Swich = "WHERE"; $SQL = <<<SQL SELECT * FROM 顧客マスタ SQL; /*SQL作成*/ if ($顧客名 != ""){ $SQL .= " {$Swich} 顧客名 LIKE ? "; //スイッチをANDにする $Swich = "AND"; //array追加 array_push($query,$顧客名); } if ($企業名 != ""){ $SQL .= " {$Swich} 企業名 LIKE ? "; //スイッチをANDにする $Swich = "AND"; //array追加 array_push($query,$企業名); } if ($担当者 != ""){ $SQL .= " {$Swich} 担当者 LIKE ? "; //スイッチをANDにする $Swich = "AND"; //array追加 array_push($query,$担当者); } /*SQL作成*/ try { $PDO = new PDO($dns,$id,$pass); $stmt = $PDO->prepare($SQL); $stmt->execute($query); $HTML = "NO-DATA"; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $HTML = <<<HTML <tr> <td></td> <td>[KIGYO]</td> <td>[Yubin]</td> <td>[Jyusyo]</td> <td>[tantou]</td> <td>[syosai]</td> </tr> HTML; } echo var_dump($query); }catch(PDOException $e){ echo $e; } ?> 静的プレースホルダというものを使ってみました
s8_chu

2017/02/18 15:55

静的プレースホルダを使用しているとのことですが、パラメータをどこでバインドしているのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問