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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

2回答

240閲覧

postされた値で絞込みしたいのですがエラーが出ました

nakaji060

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2018/09/27 12:38

編集2018/09/27 13:12

前提・実現したいこと

postされた値から絞込みをしたいと考えています

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

mampで一通り完成したものを実際にサーバー(スターフリーサーバー)を借りてアップロードしたところエラーが出ました。dbnameやhost名には問題なかったようです。

エラーメッセージ
Fatal error: Uncaught Error: Call to a member function bindValue()on boolean
###試したこと、確認したこと
エラーコードを調べましたが関数が定義されていないなどのことで表示されるようですがmampでコードを実装した際には問題なくできていました。dbnameなどに問題はありませんでした。

該当のソースコード

php

1```<?php 2 ini_set('display_errors', "On"); 3 try{ 4 $pdo = new PDO('mysql:host=◯;dbname=◯;charset=utf8','◯','◯', 5 array(PDO::ATTR_EMULATE_PREPARES => false)); 6 7 $wide=$_POST['wide']; 8 $height=$_POST['height']; 9 //確認内容 10 echo "</br>"; 11 echo "入力内容"; 12 echo "</br>"; 13 echo "幅:"; 14 echo $wide; 15 echo "</br>"; 16 echo "高さ:"; 17 echo $height; 18 echo "</br>"; 19 20 21 //db検索 22 if( $wide == '未選択' && $height == '未選択' ){ 23 //両方未選択 24 echo '両方未選択でした。'; 25 $sql2="SELECT * FROM ◯"; 26 $stmt=$pdo->prepare($sql2); 27//この行がエラーと出ました $stmt->bindValue(':wide',$wide); 28 $stmt->bindValue(':height',$height); 29 $stmt->execute(); 30 $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 31 $count=$stmt->rowCount(); 32 print "すべて表示します。".$count."件です。"; 33 echo "</br>"; 34 } 35 else if( $wide == "未選択" ){ 36 $sql2="SELECT * FROM ◯◯ WHERE height = :height"; 37 $stmt=$pdo->prepare($sql2); 38 $stmt=bindParam(':height', $height); 39 $stmt->execute(); 40 $count=$stmt->rowCount(); 41 $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 42 print "ヒット件数".$count."件です。"; 43 echo "</br>"; 44 } 45 46 else if( $height =='未選択'){ 47 $sql2="SELECT * FROM ◯◯ WHERE widenum LIKE :wide"; 48 $stmt=$pdo->prepare($sql2); 49 $stmt->bindValue(':wide',"%{$wide}%"); 50 $stmt->execute(); 51 $count=$stmt->rowCount(); 52 $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 53 print "ヒット件数".$count."件です。"; 54 echo "</br>"; 55 } 56 else { 57 $sql2="SELECT * FROM ◯◯ WHERE widenum LIKE :wide AND height = :height"; 58 $stmt=$pdo->prepare($sql2); 59 $stmt->bindValue(':wide', "%{$wide}%"); 60 $stmt->bindValue(':height',$height); 61 $stmt->execute(); 62 $count=$stmt->rowCount(); 63 $rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 64 print "ヒット件数".$count."件です。"; 65 echo "</br>"; 66 } 67 }catch (PDOException $e){ 68 echo '<span>DB接続においてエラーがありました。</span><br>'; 69 echo $e->getMessage(); 70 die(); 71 } 72 73 ?>

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

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

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

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

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

m.ts10806

2018/09/27 12:40

タイトルは質問内容にもっと寄ったものにしてください。PHPであることはタグでわかりますし何をしていて出た何のエラーか、このタイトルではわかりません。また、ソースコードはマークダウンのcode機能を利用してください。
m.ts10806

2018/09/27 12:43

エラーが出たのであれば、そのエラーメッセージをコピペして質問に記載してください。またエラーメッセージで調べられることもたくさんあるのでそれを以て「試したこと」として追記してください。 https://teratail.com/help/question-tips
m.ts10806

2018/09/27 12:55

調べて何をやったか伝えていただかないと、なぜ解決できなかったのか誰もわかりません。せめて何を試したか、どのような記事を参考したのか提示してください。PHPマニュアルで仕様を確認するのも必須です。
guest

回答2

0

sql文が間違っていました

投稿2018/09/27 13:38

nakaji060

総合スコア10

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

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

m.ts10806

2018/09/27 13:56

後から同じような問題を抱えた誰かが見てもわかるように具体的に解決した内容を記載してください。 回答も編集することができます。 また、「ベストアンサー」を選び「解決済み」としてください。 そのあたりの注意点や流れは下記にあります。 https://teratail.com/help/question-tips
guest

0

エラーが出たという箇所で気になったところだけで回答とします。

$sql2="SELECT * FROM ◯";

$stmt=$pdo->prepare($sql2);
$stmt->bindValue(':height',$height);

$sql2にはどこに[:height]という指定がありますか?

蛇足:
同じような処理が幾つもあるのでいちいちifで分岐させるのではなくて
動的にWhere句を作り、POSTされた内容によってbindを決めて、下記は1つに集約した方がスッキリします。ご検討ください。

php

1$stmt->execute(); 2$count=$stmt->rowCount(); 3$rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 4print "ヒット件数".$count."件です。";

投稿2018/09/27 13:02

m.ts10806

総合スコア80850

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

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

nakaji060

2018/09/27 13:07

返信有難うございます。ご指摘いただいた部分ですが両方が未選択の場合、すべてのデータを出す仕組みになっています。
m.ts10806

2018/09/27 13:10

ですから。未選択の場合はWHERE句自体作らないしbindもしなければいいだけです。
m.ts10806

2018/09/27 13:14

いずれも元々出ているエラーを解消された前提で進めてください。 もともと出ているエラーの解消については「蛇足」の前までです。
nakaji060

2018/09/27 13:25

今の所、ご指摘いただいた所のbindの部分を削除して実装した所$stmt->execute();の部分でエラーが出てしまいました。Uncaught Error: Call to a member function execute() on boolean in となり同じようなエラーでした。これからurlの部分を参考にしていきます
m.ts10806

2018/09/27 13:29 編集

エラー解決していないのに次に移らないでください。 と、書いたつもりでしたけど・・・ 現在のコードを追記してください。またそのエラーってよくあるエラーです。検索すればどこかで必ず自身に近い状況のものが出てくるはずです。 PHPマニュアルは確認されましたか? 正しい手順を踏んでいるか、不足している情報はないか、過剰な情報は入れていないか、タイピングミスはないか、SQLは直接DBに投げても正しく実行されるか これら全て確認するようにしてください。 結局質問者さんの手で実行して確認しなければなりませんし、 回答者はあなたの傍についてアドバイスしているわけではありません。
nakaji060

2018/09/27 13:38

解決しました。申し訳ないことにsqlの文が違っていたみたいです。
m.ts10806

2018/09/27 13:54

何がどのように間違っていたか書かないと回答としてはNGだと思います。 既にコメントで書きましたが、問題が起きた時はすぐ丸投げしてしまうのではなく、 下記を確認するようにしてください。 ・デバッグをすること  →どこまで想定通りの情報が渡っているか、想定通りの個所を通っているか確認する。   適宜下記を入れるだけでも違います。 echo __LINE__."<br />"; ・エラーメッセージで検索すること。  →起きている問題は世界で初めて自分が直面したものではないので、必ずヒントはどこかにあります。 ・PHPマニュアルを確認すること。  →もっとも正しい情報が書いてあるところです。仕様確認にも役立ちますし、その機能がどのPHPバージョンで有効かもわかります。サンプルコードも多くあります。そこから得られる知見は最も正確であるはずです。 そこから: ・正しい手順を踏んでいるか ・不足している情報はないか ・過剰な情報は入れていないか ・タイピングミスはないか DBを利用している場合: ・SQLは直接DBに投げても正しく実行されるか 自分で解決できたらそれが一番早いわけです。 問題が起きたら自身が成長するチャンスと思えるようになったら一気に伸びますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問