Fatal error: Call to undefined method MDB2_Error::execute()
エラーが発生しております。解決が出来ず半日が経ち、困っております。
どなたかご教授願います。内容は会員登録確認画面から(データベース登録)会員確定画面の際にうまく機能していません。よろしくお願いします。
tourokucheck.php

//DB接続
$db = MDB2::connect(DNS);
if (PEAR::isError($db)) {
die($db->getMessage());
}
//プレースホルダで SQL 作成
$sql = "SELECT COUNT(*) AS CNT FROM USERS WHERE ID = ? ;";
//var_dump($sql);
//パラメーターの型を指定
$stmt = $db->prepare($sql, array('text'));
//パラメーターを渡して SQL 実行
$rs = $stmt->execute(array($id));
//var_dump($rs);
while ($row = $rs->fetchRow(MDB2_FETCHMODE_ASSOC)) {
$count = $row['cnt'];
}
$db->disconnect()
?>

touroku_submit.php
<?php
require_once 'MDB2.php';
require_once("function.php");
session_start();
header("Content-type: text/html; charset=utf-8");


//CSRF チェック
if ($_SESSION['token'] != $_POST['token']) {
$_SESSION = array();
session_destroy();
session_start();

$_SESSION["error_status"] = 2;
header("HTTP/1.1 301 Moved Permanently");
header("Location: login.php");
exit();
}

//エラー情報のリセット
$_SESSION["error_status"] = 0;

$name = $_POST['full_name'];
$name_kana = $_POST['furigana'];
$birthday = ($_POST['birthday']);
$postcode = ($_POST['postcode']);
$address = ($_POST['address']);
$mail = $_POST['mail'];
$telephone = $_POST['telephone'];
$password = $_POST["password1"];

$salt = get_salt();

$url_pass = get_url_password();

$hash = strechedPassword($salt, $password);

//DB接続
$db = MDB2::connect(DNS);
if (PEAR::isError($db)) {
die($db->getMessage());
}

//プレースホルダで SQL 作成
$sql = "INSERT INTO USERS (name,name_kana,birth,postcode,address,MAILADDRESS,telephone,PASSWORDSALT,TEMP_PASS,LAST_CHANGE_PASS_TIME,RESISTER_TIME) ";
var_dump($sql);
$sql .= " VALUES (?,?,?,?,?,?,?,?,?,?,?);";
//パラメーターの型を指定
$stmt = $db->prepare($sql, array('text','text','text','text','text','text','text','text','text','timestamp','timestamp'));
//パラメーターを渡して SQL 実行
echo 'name:';
$res = $stmt->execute($name,$name_kana,$birth,$postcode,$address,$mail,$telephone,$password,$salt,$hash,$url_pass,date('Y-m-d H:i:s'),date('Y-m-d H:i:s'));
//var_dump($res);
//ID重複の可能性があるのでチェック
if (PEAR::isError($res)) {
$db->disconnect();

$_SESSION["error_status"] = 4;
header("HTTP/1.1 301 Moved Permanently");
header("Location: register.php");
exit();
}

$db->disconnect();

//ユーザーにメールの送信

//メールヘッダーインジェクション対策
$mail = str_replace(array("\r\n","\r","\n"), "", $mail);

$url = "https://" . SERVER . "/register_confirm.php?" . $url_pass;

$msg = "以下のアドレスからアカウトを有効にしてください。" . PHP_EOL;
$msg .= "アドレスの有効時間は10分間です。" . PHP_EOL;
$msg .= "有効時間後はパスワードのリセットを行ってください。" . PHP_EOL . PHP_EOL;
$msg .= $url;
mb_language("ja");
mb_internal_encoding("UTF-8");
mb_send_mail($mail, "ユーザー登録", $msg, " From: " . SENDER_EMAIL);

?>

このQ&Aに関連する最新のQ&A

A 回答 (2件)

execute()でエラーが出てるようでしたら、$res = $stmt->execute(・・・ 以降にある


if (PEAR::isError($res)) {} 内で以下をecho出力して何かヒントとなる情報は出てきませんか?

$res->getMessage();
$res->getDebugInfo();
    • good
    • 0
この回答へのお礼

何とか解決することが出来ました。一つずつvar_dumpで確認して理解することが出来ました。

お礼日時:2016/01/17 00:41

>エラーが発生しております。

解決が出来ず半日が経ち、困っております。

エラー行番号でていませんか?
該当行およびその前後はどうなっていますか?

connectの際"DNS"の定数をしていしているように見えますが
typoだとは思いますが、一般に指定するのはData Source NameなのでDSNです。
そのあたり細かい記載ミスがないかをチェックしてみてはどうでしょうか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphp pear mdb2に質問です。

php pear mdb2に質問です。

以下の関数でエラーが出ます。

間違っているところがあれば、回答お願いします。

function product_info($id) {
global $db;
$res = $db->query("SELECT * FROM product WHERE id=?",
array($id));

if ($res != null) {
$row = $res->fetchrow(MDB2_FETCHMODE_ASSOC);
return $row;
}
return null;
}

Aベストアンサー

具体的なエラー内容を教えてください。そうでないと判断のしようがありません。
とりあえず考えられる原因としては、DBはちゃんとオープンできていますか?
---ここから---
$db =& MDB2::connect("…");
if( MDB2::isError($db) ) {
print "connect error: ".$db->getMessage();
}
---ここまで---
といった感じで、$dbを代入してる所でエラーチェックしてみてください。

それと、queryの結果は、エラー時にはエラーであるという情報が入ってますので、nullとの比較ではエラー判定できません。
原因究明のため、「if ($res != null)」の部分は、以下のようにエラー内容を表示させるようにしてみてください。

---ここから---
if (MDB2::isError($res)) {
print "query error: ".$res->getMessage();
} else {
return $row;
}
---ここまで--

これで、具体的にどういうエラーが出るのか教えていただければ、状況は判断しやすくなるかと思います。

具体的なエラー内容を教えてください。そうでないと判断のしようがありません。
とりあえず考えられる原因としては、DBはちゃんとオープンできていますか?
---ここから---
$db =& MDB2::connect("…");
if( MDB2::isError($db) ) {
print "connect error: ".$db->getMessage();
}
---ここまで---
といった感じで、$dbを代入してる所でエラーチェックしてみてください。

それと、queryの結果は、エラー時にはエラーであるという情報が入ってますので、nullとの比較ではエラー判定できません。
原因究明のため、「if...続きを読む

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QMDB2エラーが対応出来ません。

以前質問をさせて頂きましたが、現状もわかっていない状況です。
Fatal error: Call to undefined method MDB2_Error::execute()register_check.php on line 39

ご指摘があったDNS→DSNに変更しましたが変わらない状況です。

function.php
<?php
define("DNS","mysql://root@localhost/mihon?charset=utf8");
define("SERVER", "127.0.0.1");
define("SENDER_EMAIL", "root@localhost");
define("STRETCH_COUNT", 1000);



register_check.php
//DB接続
$db = MDB2::connect(DNS);
if (PEAR::isError($db)) {
die($db->getMessage());
}
//プレースホルダで SQL 作成
$sql = "SELECT COUNT(*) AS CNT FROM USERS WHERE ID = ? ;";
//var_dump($sql);
//パラメーターの型を指定
$stmt = $db->prepare($sql, array('text'));
//パラメーターを渡して SQL 実行
$rs = $stmt->execute(array($id));   ←ココがエラー
//var_dump($rs);
while ($row = $rs->fetchRow(MDB2_FETCHMODE_ASSOC)) {
$count = $row['cnt'];
}
$db->disconnect()
?>

var_dumpで確認すると以下の文が出てきます
object(MDB2_Error)[3]
public 'error_message_prefix' => string '' (length=0)
public 'mode' => int 1
public 'level' => int 1024
public 'code' => int -18
public 'message' => string 'MDB2 Error: no such table' (length=25)
public 'userinfo' => string '_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE MDB2_STATEMENT_mysql_b347dce676c5b552469498333641d692 FROM 'SELECT COUNT(*) AS CNT FROM USERS WHERE ID = ? ;']
[Native code: 1146]
[Native message: Table 'mihon.users' doesn't exist]

参考サイトは以下です。このサイトを見て作成しています。
http://www.websec-room.com/2015/03/15/2153

データベース名はmihonに変更しています。
どうぞよろしくお願い致します。

以前質問をさせて頂きましたが、現状もわかっていない状況です。
Fatal error: Call to undefined method MDB2_Error::execute()register_check.php on line 39

ご指摘があったDNS→DSNに変更しましたが変わらない状況です。

function.php
<?php
define("DNS","mysql://root@localhost/mihon?charset=utf8");
define("SERVER", "127.0.0.1");
define("SENDER_EMAIL", "root@localhost");
define("STRETCH_COUNT", 1000);



register_check.php
//DB接続
$db = MDB2::connect(DNS);
if (PEAR::i...続きを読む

Aベストアンサー

>[Native message: Unknown column 'RESISTER_TIME' in 'field list']
テーブルのレコード「RESISTER_TIME」(一番最後のカラム)が見つからないと出ています。レコードを確認してみてください。

Qインストールされているディレクトリを知るコマンドはありませんか?

phpのconfigerをするのに、
phpのインストールされているパスへ移動しなくてはいけませんが、
phpがどこにインストールされているかわかりません。

 rpm -qf php-4.0.6-7

とすると

 エラー: ファイル php-4.0.6-7: そのようなファイルやディレクトリはありません

と表示されてしまうのです。
rpmのサイトを見てオプションを設定して表示された結果から
ディレクトリを移動しても
コンフィギャーできるところに辿り着きませんでした。

どうしたらインストールされているディレクトリを
知ることができるでしょうか?

OSは以下の通りです。
AIX Version 4 もしくは LASER5 Linux release 7.2

今月が納期で生じたバグ対応のため大変困っています。
質問場所が違っていたら申し訳ないですが、
よろしくお願いいたします。

Aベストアンサー

Laser5に限っての話ですが、標準のインストールでphpはインストールされるはずですが。

# rpm -qa | grep -i php

でphpのパッケージ名は表示されませんか?

findを実行した結果、

php(コマンド)
libphp4.so(ライブラリ)
php.ini(設定ファイル)

等も見つからないのでしょうか?
もしそうならphpはパッケージもソースでもインストールされていない可能性があります。

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

QMySQLへのDB::connectで、failedとなる

MySQLに、チャレンジしようとしています。
MySQL-5.0.45 をインストールしました。
セットアップできたようで、MySQL AdministratorツールからサンプルDBが見えました。
そこで、PHP-5.2.4から、PEAR::DBを使ってconnectしようとすると、
DB Error connect failed-24
となってしまいます。
テキストによると、確認すべき点として
 ・データベースサーバが起動していない
 ・対象のaaaデータベースが存在しない
 ・ユーザ名/パスワードが存在しない、権限がない
等を確認しているつもりですが、間違ってないように思います。
pear::logは、動きました。
他にどのあらりをチェックすればいいのでしょうか。

Aベストアンサー

OSはなんでしょうか?

Linux系でしたらpsコマンドを用いて本当にmysqlが起動しているか確認するとよろしいと思います。
Windows系でしたらタスクマネージャからプロセスを確認するとよろしいです。

起動済みでしたら本当にそのプロセスが生きているか確認しましょう。
mysql -u USER -PPASSWORD
これでログインできれば正常でしょう。
// 入れない場合はselinuxがらみのpermissionか
// my.cnfの設定忘れのような気がします。
// 私もよくミスりますorz

ケアレスミスとしては
・大文字小文字
・ひきすうの順番が違う
・php.iniの設定ミス
くらいですかね。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Q英語で「個数」「件数」は?

質問は単純です。
英語で「個数」や「件数」をなんというか、です。

とりあえず、思いついたのは、numberでした。
たとえば、「りんごの個数」は"a number of apples"ですか?
でも、"a number of"は「いくつかの」という意味ですよね。

「データの件数」は"a number of data"でしょうか?

私は英語はほとんど出来ませんが、numberは「個数」というよりも「番号」という意味であるような気がしてなりません。

Aベストアンサー

>「個数」や「件数」をなんというか、です。
>とりあえず、思いついたのは、numberでした。
意外に思われるかもしれまんせんが、語の選択はnumberであっています、と思います。

>「りんごの個数」
the number of (the) apples

>「データの件数」
the number of (the) data

>numberは「個数」というよりも「番号」という意味であるような気がしてなりません。
実は、昔、私も、「個数や件数はなんていうのかな、え、number? え、本当?」と、奇異に感じたことを、思い出しました。


人気Q&Aランキング

おすすめ情報