• 締切済み

phpで作成した構文が上手く動きません 。

phpでmysqli構文が上手く動きません 質問します、よろしくお願いします。 現在 winVista、Xampp( apache、 php5、 mysql)にてプログラムの勉強をローカルで行っています。 ですが、書籍に載っていた以下のコードを実行してもエラーがでてうまく動きません。 幾ら調べてもわからず困っております、なにが原因でしょうか?ご教授をお願いいたします。 <?php /************************************************* * データベース操作 * */ require_once 'MDB2.php'; $sv = "localhost"; $dbname = "login_apri"; $user = "root"; $pass = "123456789"; $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; //---------------------------------------------------- // データベース接続 //---------------------------------------------------- function db_connect($dsn){ $conn =& MDB2::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (MDB2::isError($conn)){ die($conn->getMessage()); } return $conn; } //---------------------------------------------------- // 検索結果を多次元配列で受け取る //---------------------------------------------------- function select_arrays($conn, $sql){ $result = execute_sql($conn, $sql); // レコードの取得 $i=0; $data = array(); while ($rec = $result->fetchRow(DB_FETCHMODE_ASSOC)) { foreach( $rec as $key => $value){ $value = sjis2euc_for_Winodows($value); $data[$i][$key] = $value; } $i++; } // 検索件数 $count = $result->numRows(); // クエリー結果セットの開放 $result->free(); return array($data, $count); } // 検索件数 $count = $result->numRows(); // クエリー結果セットの開放 $result->free(); return array($data, $count); } /************************************************* ブラウザに表示されるエラーは以下の通りです。 Fatal error: Call to undefined method MDB2_Error::fetchRow() in C:\xampp\htdocs\HP\login_main\php_libs\module\dbtest3.php on line 32 32行目は while ($rec = $result->fetchRow(DB_FETCHMODE_ASSOC)) { どなたかご回答をなにとぞ宜しくお願いします。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • hyoro
  • ベストアンサー率71% (5/7)
回答No.2

$dsnに指定している変数が定義されていないからではないでしょうか。 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; の部分を下のように変更してみてください。 $dsn = "MDB2//$user:$pass@$sv/$dbname"; これでもエラーが出るようであれば、先の人が言われているとおり、パスが通っていないのではないかと思います。

回答No.1

こんにちは。 エラーの内容は「MDB2が定義されていない」というものです。 require_once 'MDB2.php'; で指定している、MDB2.phpへのパスは合っていますか? もしくは、MDB2.phpを用意していますか? 私の環境とは異なるので、エラー表示のみでチェックしただけになりますが、一度確認してみてください。

関連するQ&A

  • phpで作成した構文が上手く動きません 。

    phpでmysqli構文が上手く動きません 質問します、よろしくお願いします。 現在 winVista、Xampp( apache、 php5、 mysql)にてプログラムの勉強をローカルで行っています。 ですが、書籍に載っていた以下のコードを実行してもエラーがでてうまく動きません。 幾ら調べてもわからず困っております、なにが原因でしょうか?ご教授をお願いいたします。 <?php /************************************************* * データベース操作 * */ require_once \'MDB2.php\'; $sv = \"localhost\"; $dbname = \"login_apri\"; $user = \"root\"; $pass = \"123456789\"; $dsn = \"$dbType://$dbUser:$dbPass@$dbHost/$dbName\"; //---------------------------------------------------- // データベース接続 //---------------------------------------------------- function db_connect($dsn){ $conn =& MDB2::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (MDB2::isError($conn)){ die($conn->getMessage()); } return $conn; } //---------------------------------------------------- // 検索結果を多次元配列で受け取る //---------------------------------------------------- function select_arrays($conn, $sql){ $result = execute_sql($conn, $sql); // レコードの取得 $i=0; $data = array(); while ($rec = $result->fetchRow(DB_FETCHMODE_ASSOC)) { foreach( $rec as $key => $value){ $value = sjis2euc_for_Winodows($value); $data[$i][$key] = $value; } $i++; } // 検索件数 $count = $result->numRows(); // クエリー結果セットの開放 $result->free(); return array($data, $count); } // 検索件数 $count = $result->numRows(); // クエリー結果セットの開放 $result->free(); return array($data, $count); } /************************************************* ブラウザに表示されるエラーは以下の通りです。 Fatal error: Call to undefined method MDB2_Error::fetchRow() in C:\\xampp\\htdocs\\HP\\login_main\\php_libs\\module\\dbtest3.php on line 32 32行目は while ($rec = $result->fetchRow(DB_FETCHMODE_ASSOC)) { どなたかご回答をなにとぞ宜しくお願いします。

    • 締切済み
    • PHP
  • PEAR Pagerについて

    PHP Pagerのスクリプトを作成したのですが、うまく動きません。 DBに接続、検索、表示、までは動作確認できたのですが、Pagerを作成してからエラーが出るようになってしまいました。検索データ格納らへんがうまくいってないような気がするのですが・・・・。 DB Error: syntax error が出てしまいます。 どなたかアドバイスの程宜しくお願いします。 $result=$conn->query($sql); if(DB::isError($result)){ die($result->getMessage()); } $count=$result->numRows(); print"店舗数は".$count."件です"; while($rs=$result->fetchRow(DB_FETCHMODE_ASSOC)) { require_once('Pager/Pager.php'); $options = array( "totalItems" => $count, "perPage" => 3, "delta" => 5, "urlVar" => "pageNo" ); $pager =& Pager::factory($options); $navi = $pager -> getLinks(); $tenpo_name = $rs['tenpo_name']; print("{$tenpo_name}"); } ?>

    • ベストアンサー
    • PHP
  • php 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; }

    • ベストアンサー
    • PHP
  • プレインPHPでのSQL検索結果取得

    初心者の質問ですみません。 フレームワークをずうっと使って来たのですが、フレームワークを使わずに検索をしようとしたところ、全く思うようにいかず困っています。 SELECT * FROM table のような単純なSQL文なのですが、PEARを使って $sql = "SELECT * FROM table"; $result = $conn->query($sql); としvar_dumpしてみると、期待していたSQLのデータが表示されません。 フレームワークを使っていると、この時点でどのフレームワークでもきれいに連想配列で表示できていました。 その辺が、フレームワークのフレームワークたるゆえんなのでしょうか..... ただ、結果は取得できているようで、 $count = $result->numRows(); としてやると正しい件数が表示されますし、カラム名を指定して while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){ echo $rs['column_name']; } としてやるとカラムの値を表示します。 やりたいこととしては、検索結果を連想配列で取得し、foreachで行ごとに処理を行うことで、whileで$rs['column_name']を取得できることから、最悪でも力技で行ごとにカラム情報を全て取得して配列を作ってやることはできるとは思うのですが、もっと良い方法が無いはずがないと思います。 教えていただけますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQLの「データを検索して表示する」について

    名前を入れて検索すると、このように下記の様に表示されてしまいます。 Parse error: syntax error, unexpected '>' in C:\xampp\htdocs\list.php on line 52 検索フォームのsearch.phpは <HTML> <HEAD> <TITLE>検索テスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY bgcolor="#FFFFFF"text="#000000"> <FONT size="4">検索テスト</FONT> <FORM name="form1" method="post" action="list.php"> 名前;<BR> <INPUT type="text" name="search_key"> <BR> <INPUT type="submit" value="検索"> </FORM> </BODY> </HTML> です。 データ検索のlist.phpは <HTML> <HEAD> <TITLE>検索テスト</TITLE> </HEAD> <BODY> <?php require_once("DB.php"); $dbUser = "sample"; $dbPass = "password"; $dbHost = "localhost"; $dbName = "sampledb"; $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = DB::connect($dsn); //接続にしっぱいしたらメッセージを表示して終了します。 if (DB::isError($conn)) { die($conn->getMessage()); } //POSTされたデータを受け取り、エスケープします。 $search_key =addslashes($_POST['search_key']); $sql = <<<EOS SELECT * FROM member WHERE last_name like'%$search_key%' OR first_name like'%$search_key%' EOS; if(preg_match("/Windows/",$_ENV["OS"])){ $sql = mb_convert_encoding($sql,"SJIS","EUC-JP"); } $result = $conn->query($sql); if (DB::isError($result)) { die($result->getMessage()); } $count = $result->numRows(); print"検索結果は".$count."件です。"<BR>"; if($count>0){ ?> <TABLE width="450" border="1" cellspacing="0" cellpadding="8"> <TBODY> <TR><TH>番号</TH><TH>氏</TH><TH>名</TH><TH>年齢</TH></TR> <?php while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) { if(preg_match("/Windows/",$_ENV["OS"])){ $rs['last_name'] = mb_convert_encoding( $rs['last_name'],"EUC-JP","SJIS"); $rs['first_name'] = mb_convert_encoding( $rs['first_name'],"EUC-JP","SJIS"); } ?> <TR><TD align="center"><?=$rs['id']?></TD> <TD><?=$rs['last_name']?></TD> <TD><?=$rs['first_name']?></TD> <TD align="center"><?=$rs['age']?></TD></TR> <?php } $result->free(); $conn->disconnect(); ?> </BODY> </HTML> です。 「速効!図解プログラミングPHP+MySQL」を見ながら、その通りに書いたのですが動きませんでした。 XAMPPを使って作っています。 長々と失礼しましたが、どうか解決策を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR MDB2 のsetFetchModeが設定がうまくいきません

    お世話になります。 Pearのmdb2を使用し始めたのですが、 setFetchMode(DB_FETCHMODE_ASSOC) の記述をしても、データが連想配列形式になりません。 (数値添え字の配列になってしまいます。) 何か問題として考えられることはありませんでしょうか。 環境は、 CentOS5 apache 2.2.3 php 5.1.6 mysql 5.0.22 (すべてRPM) です。 ソースは下記のとおりです。 $mdb2 =& MDB2::connect( $dsn, array() ); if( PEAR :: isError( $mdb2 ) ){ $errmsg .= "データベースの接続に失敗しました。<br />"; }else{ //連想配列で取り出す $mdb2->setFetchMode(DB_FETCHMODE_ASSOC); $res =& $mdb2->query('SELECT * FROM tablename'); if (PEAR::isError($res)) { $errmsg .= "SQLの実行に失敗しました。<br />"; } print("<pre>"); while ($row = $res->fetchRow()) { print_r($row); } print("</pre>"); // 接続断 $mdb2->disconnect(); } アドバイスがあればぜひよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • FLASHとの連携について

    FLASHに値を渡すためPHPを書いていますが行き詰ってしましました。 下の文面の  $messeid = ?; echo "&res1=".$messeid."&"; の$messeidに<?=$rs['id']?>の値を代入したいのですが出来ません。 ブラウザで確認するとテーブルに値がちゃんと入って表示されますし   $messeid = 1; とするとFLASH側で1と表示されますのでデータベース、FLASHともに通信は出来ているようです。 (xx)/~何卒ご指導お願いいたします。 <?php require_once("DB.php"); $dbUser = "Youser"; // ユーザー名 $dbPass = "Pass"; // パスワード $dbHost = "localhost"; // ホスト名 $dbName = "Database"; // データベース名 $dbType = "mysql"; // データベースの種類 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; // データベースに接続 $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)){ die($conn->getMessage()); } // POSTされたデータを受け取り、エスケープします。 $s_designid = addslashes($_POST['search_designid']); $s_newpass = addslashes($_POST['search_newpass']); $sql = <<<EOS SELECT * FROM passkanri where back_pass = '$s_designid' and new_pass = '$s_newpass'; EOS; //この$messeidにデータベースから得た値を代入したい $messeid = <?=$rs['id']?>; echo "&res1=".$messeid."&"; // SQL文を発行 $result = $conn->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } // 検索件数の表示 $count = $result->numRows(); print "検索結果は" . $count . "件です。<BR>"; if($count > 0){ ?> <TABLE width="450" border="1" cellspacing="0" cellpadding="8"> <TBODY> <TR><TH>ID</TH><TH>DESIGN_ID</TH><TH>BACK_PASS</TH><TH>NEW_PASS</TH></TR> <?php while ($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) { mysql_query("set names utf8"); ?> <TR> <TD align="center"><?=$rs['id']?></TD> <TD align="center"><?=$rs['design_id']?></TD> <TD align="center"><?=$rs['back_pass']?></TD> <TD align="center"><?=$rs['new_pass']?></TD> <?php } ?> </TBODY></TABLE> <?php } $result->free(); $conn->disconne ?>

    • 締切済み
    • PHP
  • PEAR::MB2によるPHP+MySQLについて

    PEAR::MB2でPHP+MySQLを勉強中なのですが、特定カラムの値を取得することができません。 下記のソースコードで、変数$aaaをechoで参照すると空白となってしまいます。 大変恐縮ですがご教授のほどよろしくお願いいたします。 [環境]----------------------------------------------------------- OS: windows7(64bit) PHP: ver5.3.8 MySQL: ver5.5 Pear::MDB2  pear/MDB2 2.5.0b3 2.4.1 database abstraction layer  pear/MDB2_Driver_fbsql 0.2.0 fbsql MDB2 driver  pear/MDB2_Driver_ibase 1.5.0b3 ibase MDB2 driver  pear/MDB2_Driver_mssql 1.5.0b3 mssql MDB2 driver  pear/MDB2_Driver_mysql 1.5.0b3 1.4.1 mysql MDB2 driver  pear/MDB2_Driver_mysqli 1.5.0b3 mysqli MDB2 driver  pear/MDB2_Driver_oci8 1.5.0b3 oci8 MDB2 driver  pear/MDB2_Driver_odbc 0.1.0 ODBC Driver for MDB2  pear/MDB2_Driver_pgsql 1.5.0b3 pgsql MDB2 driver  pear/MDB2_Driver_querysim 0.6.0 querysim MDB2 driver  pear/MDB2_Driver_sqlite 1.5.0b3 sqlite MDB2 driver  pear/MDB2_Driver_sqlsrv 1.5.0b3 sqlsrv MDB2 driver  pear/MDB2_Schema 0.8.5 XML based database schema manager  pear/MDB2_TableBrowser 0.1.2 Database table abstraction library (pear list -allから一部抜粋) [ソースコード]----------------------------------------------------------- require_once("MDB2.php"); $dsn = "mysql://user:pass@localhost/db_name"; $conn = MDB2::connect($dsn); // 接続に失敗したらメッセージを表示して終了 if (MDB2::isError($conn)){ die($conn->getMessage()); } //フェッチモード設定 $conn->setFetchMode(MDB2_FETCHMODE_ASSOC); //SELECT文 $sql = <<<EOS SELECT * FROM db_table WHERE name = 'taro' EOS; //実行 $res = $conn->query($sql); //エラーチェック if (PEAR::isError($res)) { die($res->getMessage()); } //値の取得 $row = $res->fetchRow(); //変数$aaaに、別カラム値(例:miyoji)を格納 $aaa = $row['miyoji']; echo "$aaa"; //←(例)mysqlから田中といった苗字を出力したい。 //クローズ $conn->disconnect(); ----------------------------------------------------------------------- エラー出力はありません。

    • ベストアンサー
    • PHP
  • 構文の省略について

    下記をもっと省略(短い構文で)して書きたいのですが、どのようなやり方があるでしょうか。 testというテーブルから指定したidのnameを取り出して並べたいだけなのですが、このような長々としたものしか思い浮かびませんでした。 <?php $n1 = 1; $n2 = 2; $n3 = 3; $rs1 = mysql_query("select * from test where id = '$n1';",$conn); $rec1 = mysql_fetch_array($rs1, MYSQL_ASSOC); echo $rec1['name']; echo <br>; $rs2 = mysql_query("select * from test where id = '$n2';"); $rec2 = mysql_fetch_array($rs2, MYSQL_ASSOC); echo $rec2['name']; echo <br>; $rs3 = mysql_query("select * from test where id = '$n3';"); $rec3 = mysql_fetch_array($rs3, MYSQL_ASSOC); echo $rec3['name']; mysql_free_result($rs1); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($conn); ?>

    • ベストアンサー
    • PHP
  • PHPでDBの複数行更新について

    はじめまして、PHPを最近使い始めました初心者です。 [環境] PHP: 5.4.7 DB: SQLite 3.7.15.2 a  OS: Windows 7 DB上のテーブルへ複数行を挿入するソースを書いてますが 下記の文法エラーとなり行き詰っています。 [配列データとソース] Array ( [0] => Array ( [0] => 1359904500 [1] => 1359905400 [2] => 150 ) [1] => Array ( [0] => 1359990900 [1] => 1359991800 [2] => 150 ) [2] => Array ( [0] => 1360077300 [1] => 1360078200 [2] => 150 ) [3] => Array ( [0] => 1360163700 [1] => 1360164600 [2] => 150 ) 以下100件ほど続きます $sql1 = "INSERT INTO aaa (id,sstamp,estamp,data,flag) VALUES " ; $flag = 1; $count = count($time_array) ; for ( $i=1; $i< $count; $i++ ) { $sql1.= "(null,'".$time_array[$i][0]."',"."'".$time_array[$i][1]."',"."'".$time_array[$i][2]."',"."'".$flag."')," ; } $sql1 = substr($sql1, 0, -1) ; var_dump($sql1) ; $result = $db->query($sql1) ; [エラー] Warning: SQLite3::query(): Unable to prepare statement: 1, near ",": syntax error var_dumpでsql作成用変数($sql1)を見てみると問題ないように見えました。 解せないのは、変数内容をsqliteのコマンドラインへコピぺすると 正常に挿入できてしまいました。また配列を一つにしてみるとエラーなくDB挿入できました。 これよりSQL複数行挿入のvalue以下の記述が怪しいと思い、確認しましたが (aa, bb, cc), (dd, ee, ff)になっているようと思えます。 どこに問題があるかご教示をお願いいたします。

    • 締切済み
    • PHP