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$test = array(80,60,22,50,75);を(22,60,80,50,75);変更

https://oshiete.goo.ne.jp/qa/9231613.html から
 $test = array(0=>80,1=>60,2=>22,3=>50,4=>75); のご回答をもとに
$test = array(80,60,22,50,75);を$test = array(22,60,80,50,75);に変更しました。
 結果が”最高得点22です。”と予想しておりました・・しかし、変わらずに
 ”最高得点は80です。”のままでした!?この場合ですが、考え方はとしまして、
 $test = array(2=>22,1=>60,0=>80,3=>50,4=>75);となったので、以上の結果となっ
との考えで間違いないでしょうか?
 よろしくお願いいたします。

Aベストアンサー

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $valueも関係性を示しているだけなので、
foreach文は以下のようにも記述できます(紛らわしいのでこんな書き方しませんが)。

foreach($test as $aaa => $bbb){
if($max < $bbb) $max = $bbb;
}

///////////////////////////////////////////

過去の質問
https://oshiete.goo.ne.jp/qa/9200257.html
でも答えましたが、

例えば配列
array("22","80", "75","60","50")
はキーを何も指定しない場合以下と同じになります。
array('0' =>"22",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"50");

array("50","80", "75","60","22")
と並び変えても
array('0' =>"50",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"22");
のままです。

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $value...続きを読む

Q「$errors = array();//エラーを格納する$errors変数を初期化する」

参考URL:http://afurieitohannei.la.coocan.jp/aaaphp.htm
以上のURL先にあります、 
$errors = array();//エラーを格納する$errors変数を初期化する
のですが!$errors = aaa();に変えてもプログラムに影響はありますか?
まだ動作確認が取れていないので試すことができません。

 よろしくお願いします。

Aベストアンサー

>$errors = aaa();に変えてもプログラムに影響はありますか?

影響がないとは言えない。
ただしaaa()が「return array();」的な空配列を返しているなら問題ない。
いずれにしろ書き方の問題というより、初期化とは何かを理解すれば自明です。

Qプログラムの中の public $name = "姓名"; public $age = 20;

以下のプログラムの中に
public $name = "姓名";
public $age = 20;
 があります。なくても表示自体に影響はないのですが、何の目的であるのでしょうか!?
以下問題のプログラムです。 よろしくお願いいたします
--------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>P251 Sample8-2 複数のオプションを作成する</title>
</head>
<body>

<?php
#$は変数の宣言
$pr1 = new Person;
$pr1->name = "鈴木";
$pr1->age = 56;

$pr2 = new Person;
$pr2->name = "佐藤";
$pr2->age = 38;

?>
<table border="2">
<tr bgcolor="#AAAAAA">
<th>名前</th>
<th>年齢</th>
</tr>

<?php

print "<tr><td>";#特に<tr>がなくてもOK
print $pr1->getnam();
print "</td><td>";#特に</td>がなくてもOKでした。
print $pr1->getage();
print "</td></tr>";#特になくても表の2行目表自体は影響はなかった。

print "<tr><td>";
print $pr2->getnam();
print "</td><td>";
print $pr2->getage();
print "</td></tr>";

?>

</table>
<?php

class Person

{
public $name = "姓名";
public $age = 20;

function getnam(){return $this->name;}
function getage(){return$this->age;}
}

?>

</body>
</html>

以下のプログラムの中に
public $name = "姓名";
public $age = 20;
 があります。なくても表示自体に影響はないのですが、何の目的であるのでしょうか!?
以下問題のプログラムです。 よろしくお願いいたします
--------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>P251 Sample8-2 複数のオプションを作成する</title>
</head>
<body>

<?php
#$は変数の宣言
$pr1 = new Person;
$pr1->name = "鈴木";
$pr1->age = 56;

...続きを読む

Aベストアンサー

変数の置き場を、メモリー上に確保するためです。
前者は文字として、後者は数値として。

Qprint "{$data[$i][$j]}";の $dataと「直接関係」がある

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都のデータを格納します。
$data[3][2] = 19;
$data[4][0] = "福岡";
$data[4][1] = 27;//$data[4][●]に福岡のデータを格納します。
$data[4][2] = 22;

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>都市名</th>
<th>最高気温</th>
<th>最低気温</th>
</tr>

<?php

for($i=0; $i<count($data); $i++){
print "<tr>";
for($j=0; $j<count($data[0]); $j++){
print "<td>{$data[$i][$j]}</td>";//配列の要素を出力する。
}
print "</tr>\n";
}

?>

</table>

</body>
</html>
以上ですが・・・だんだん難しくなってきました!
 さて
  print "<td>{$data[$i][$j]}</td>";の $dataと「直接関係」があるところは
 1) for($j=0; $j<count($data[0]); $j++){  
 2)$data[0][0] = "東京";~$data[4][2] = 22;
  の1)2)のどちらと「直接関係」があるのでしょうか?
 以上よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都の...続きを読む

Aベストアンサー

> の1)2)のどちらと「直接関係」があるのでしょうか?

No.1さんと同じく質問の意味が理解できません。
わかり易く補足いただいた方が良いかと思います。



”の1)2)のどちらと「関係」があるのでしょうか?” というご質問であれば

”どちらとも関係あります” という回答になります。

Q$_SERVER['REQUEST_METHOD']と"POST"が等しいかどうか大文字小文字を区別

せずに判別する方法を教えてください

if($_SERVER['REQUEST_METHOD']==="post")
if($_SERVER['REQUEST_SESSIONMETHOD']=="post")
if(strcasecmp($_SERVER['REQUEST_METHOD'],"post")==0)
if(strcmp($_SERVER['REQUEST_METHOD'],"post")==0)

のいずれがよいでしょうか?

Aベストアンサー

>大文字小文字を区別

区別したいなら
$_SERVER['REQUEST_METHOD']==="post"
でいいんじゃない?

ただ等号での文字列比較に対しては否定的な現場も多いので
strcmp($_SERVER['REQUEST_METHOD'],"post")===0
の方がよいかも

ちなみに多くのサーバーでは「POST」を返すので小文字「post」とはマッチしません。

むしろ
strtolower($_SERVER['REQUEST_METHOD'])==="post"
など小文字同士の比較をしていることを明示した方がよいかと。


人気Q&Aランキング

おすすめ情報