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

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

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

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

PHP

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

Q&A

解決済

2回答

7555閲覧

SQL文ではきちんと値が取得できるのに、phpから結果を取得できない

nakamura03

総合スコア25

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/09/19 10:10

編集2015/09/19 10:58

こんばんは。お世話になります。phpの勉強を始めたばかりの初心者です。
sql文ではうまく行くのに、phpを通して結果を取得しようとすると、失敗してしまいます。
何がいけないのでしょうか。ご教授お願いします。
$config = [
'pdo' => [
'dsn' => 'mysql:dbname=****;host=localhost;charset=utf8',
'username' => '****',
'password' => '****',
],
];
try {
$c = $config['pdo'];
$pdo = new PDO($c['dsn'], $c['username'], $c['password']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$stmt = $pdo->prepare('

SELECT tables.*, members.name, members.id
FROM tables, members
WHERE tables.userid = members.id and tables.id = :id
');
$stmt->bindParam(':id', $_SESSION['id'], PDO::PARAM_STR);
$stmt->execute();

$row = $stmt->fetchAll();

} catch (PDOException $e) {

$error = $e->getMessage();

}
var_dump($row); //結果は、array(0) { }

SELECT tables.*, members.name, members.id
FROM tables, members
WHERE tables.userid = members.id and tables.id = 45
のように、idをbindしないSQL文では成功して、ちゃんとデータを取得することができます。
結合する時はbindが使えないのでしょうか……

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

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

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

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

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

guest

回答2

0

ベストアンサー

$_SESSION['id'] には、値は入っていますか?一度SQL分の手前で値を代入して試してみては如何でしょうか。
:id は文字列(STR)型で良かったでしょうか。

投稿2015/09/19 12:40

Ken.sakanakana

総合スコア1768

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

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

nakamura03

2015/09/19 12:49

コメントありがとうございます。ご指摘通り確認しましたが、ちゃんとセッションには数字が入っています。また、別の方にご指摘いただきました通りstrではなく、intでした。ですが、変更しても変わりませんでした…
Ken.sakanakana

2015/09/19 12:59

$_SESSION['id']がデータベースに正しくINSERTされているかを確認したく、その $_SESSION['id'] の数字を元に、データベースで直接、該当のSQLコマンドを実行して値は出てきますか?
nakamura03

2015/09/19 15:58

再度コメントありがとうございます。 出てきました! 実際の数字を入れるとうまくいくので、bindに問題があるようなのですが…結合を含むSQL文にbindってできるのでしょうか。調べても答えにあたれず…
Ken.sakanakana

2015/09/19 17:30

・SQL文中の :idを?に、bindParam中の ':id' を 1 に変更しても同じ症状ですか? ーーー $stmt = $pdo->prepare(' SELECT tables.*, members.name, members.id FROM tables, members WHERE tables.userid = members.id and tables.id = ? '); $stmt->bindParam(1, $_SESSION['id'], PDO::PARAM_INT); ーーー ・bindParamを bindValueにしても同じですか? ーーー $stmt = $pdo->prepare(' SELECT tables.*, members.name, members.id FROM tables, members WHERE tables.userid = members.id and tables.id = :id '); $stmt->bindValue(':id', $_SESSION['id'], PDO::PARAM_INT); ーーー ・ PDO::FETCH_ASSOCなので取り出し側は、ハッシュなのですよね。。。 手探りですみません
nakamura03

2015/09/20 01:42

ありがとうございます!!!! valueにしましたら、きちんと取得してきてくれました!!!! 本当にありがとうございます!!!!!!
guest

0

php

1$stmt->bindParam(':id', $_SESSION['id'], PDO::PARAM_STR);

上記の部分ですが、データ取得に成功したSQL文を見る限りidは数値型なのにも関わらず、パラメータを文字列型で渡しています。
第三引数はPDO::PARAM_INTが正しいのではないでしょうか。

投稿2015/09/19 12:43

hy3

総合スコア594

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

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

nakamura03

2015/09/19 12:47

ご指摘ありがとうございます! ですが、すいません、変更してみましたが、変わりませんでした…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問