![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
PHP初心者です。
以下2つのファイルを使って簡単な接続テストを行ってから徐々に
目的のものを作り上げていこうとしたのですが、どうにもうまく動作しません。(2つは同一ディレクトリにある)
・「mysql.php」:DB接続とSQLの発行
・「test.php」:ブラウザ出力(本体:mysql.php呼び出し元)
実行すると「*** DB/SQLテスト ***」のみブラウザに出力されるため、試しに「mysql.php」で行うDB接続とSQL発行をすべてtest.phpに直接書いてインクルードせず単体で実行したところ、目的の結果が表示されました。
なので問題はインクルード文にあるのだと思うのですが検討がつきません。
どなたかお力をお貸し下さい。
ちなみに以下のコードは参考にしたテキストの例題をもとに見やすくするため余分な処理やエラー処理などを省いたものです。
■mysql.php
<?php
class MySQL{
var $m_con;
var $m_rows = 0;
function MySQL(){
$this->m_con = mysql_connect("ホスト名", "ユーザ名", "パスワード");
mysql_select_db("データベース名", $this->m_con);
}
function query($sql){
$this->m_rows = mysql_query($sql, $this->m_con);
return $this->m_rows;
}
}
?>
■test.php
<html>
<head>
<meta http-equive="Content-type" content="text/html; charset=utf-8">
<title>SQLtest</title>
</head>
<body>
*** DB/SQLテスト ***<br>
<?php
include("mysql.php");
$mysql = new MySQL;
$sql = "SELECT * FROM staff";
$mysql->query($sql);
while($row = mysql_fetch_array($this->m_rows)){
echo $row["id"];
echo $row["name"];
echo "<br>";
}
?>
</body>
</html>
No.4ベストアンサー
- 回答日時:
補足の通り書いているのだとすると・・
・コメントアウトが不正
/ -> //
・DBの接続情報が不正
mysql_connect($this->m_HostName, $m_UserName, $m_Password);
-> mysql_connect($this->m_HostName, $this->m_UserName, $this->m_Password);
この回答への補足
あぁ・・・やってしまいました。
我ながらなんて痛いヤツなんでしょう。最低です・・・
ご指摘のとおり、コメント文が不適切だったのが主な原因でした。
ただこのあと修正したものでテストすると「MYSQLの接続に失敗しました」がでました。
iniファイルの情報を直打ちする形で絞っていき、値が正常に読み取れていないと
推測できたのでいろいろ試したところ、「mysql.ini」の文字コードを「utf-8」から「sjis」に変更することで無事接続できました。
なぜ「utf-8」ではいけなかったのかは不勉強なのでわかりませんが、とりあえずはこれで進めることができるようになりました。
なぜエラーメッセージがでないのか、なぜincludeで処理が途切れてしまうのかという点で自分の知識の及ばない範囲の不具合かもしれないと、勝手に舞い上がってしまいました・・・
確かにコメント文はコピペでアップロード前にいい加減に付け足した覚えがあります。
エディタ機能の色分けで気づきそうなものですが、完全な思い込みで盲目になってました。
この問題にご協力頂き、真剣に考え時間を費やして下さった皆様本当に申し訳ありませんでした。
皆様の丁寧なご指摘で問題点以外でもいろいろ参考になりました。
ありがとうございました。
No.3
- 回答日時:
DB classを作るならDB操作を全てclass内に実装しないとやりにくくないですか。
PEAR/DBとかPDOとか既存のものを使うのはだめでしょうか。
この回答への補足
的外れの返答だったならすいません。
元々のサンプルコードは以下のようなDB操作をまとめてやるものでしたが
問題箇所を探す上でコードを改変し、また質問する上でその方がゴチャゴチャせずに理解して頂けると思ってこちらに載せました。
最初はmysql.iniも同一ディレクトリに用意してテストしていたのですが、うまくいかなかったので直接コード内に書くようにし、さらに関連の薄いコードを削っていきました。
この間、エラーメッセージはなかったように思います。
PEAR/DBとかPDOはまだ知識としてないのでわかりません。
このサンプルのやり方で出来たなら次のステップでもテキストを参考に進められるのでできる限りこのやり方での解を知りたいと思っています。
■mysql.php
<?php
/===============================================
/ ■:MySQLクラス
/===============================================
class MySQL{
/-----------------------------------
/ □:変数宣言
/-----------------------------------
var $m_con;
var $m_HostName = "";
var $m_UserName = "";
var $m_Password = "";
var $m_Database = "";
var $m_rows = 0;
/-----------------------------------
/ □:コンストラクタ
/-----------------------------------
function MySQL(){
$filename = "mysql.ini";
if (!file_exists($filename)){
die("mysql.iniファイルが見つかりません");
}else{
$fp = fopen($filename,"r");
if (!$fp){
die("mysql.iniファイルが見つかりません");
}else{
$this->m_HostName = trim(fgets($fp));
$this->m_UserName = trim(fgets($fp));
$this->m_Password = trim(fgets($fp));
$this->m_Database = trim(fgets($fp));
}
fclose($fp);
}
//MYSQLへ接続
$this->m_con = mysql_connect($this->m_HostName, $m_UserName, $m_Password);
if (!$this->m_con){
die("MYSQLの接続に失敗しました");
}
if(!mysql_select_db($this->m_Database, $this->m_con)){
die("データベースの選択に失敗しました");
}
}
/-----------------------------------
/ SQLクエリ処理
/-----------------------------------
function query($sql){
$this->m_rows = mysql_query($sql, $this->m_con);
if (!$this->m_rows){
die("MYSQLでエラーが発生しました<br><b>{$sql}</b></br>".mysql_errno().";".mysql_error());
}
return $this->m_rows;
}
/-----------------------------------
/ SQLクエリ処理
/-----------------------------------
function fetch(){
return mysql_fetch_array($this->m_rows);
}
/-----------------------------------
/ SQLで変更された行数を取得
/-----------------------------------
function affected_rows(){
return mysql_affected_rows();
}
/-----------------------------------
/ 列数取得
/-----------------------------------
function cols(){
return mysql_num_fields($this->m_rows);
}
/-----------------------------------
/ 行数取得
/-----------------------------------
function rows(){
return mysql_num_rows($this->m_rows);
}
/-----------------------------------
/ 結果の開放
/-----------------------------------
function free(){
mysql_free_result($this->m_rows);
}
/-----------------------------------
/ MYSQLをクローズ
/-----------------------------------
function close(){
mysql_close($this->m_con);
}
/-----------------------------------
/ SQLエラー情報(No.+ msg)
/-----------------------------------
function errors(){
return mysql_errno().": ".mysql_error();
}
/-----------------------------------
/ SQLエラーNo.
/-----------------------------------
function err_no(){
return mysql_errno();
}
}
?>
■test.php
<?php
require_once("mysql.php");
?>
<html>
<head>
<meta http-equive="Content-type" content="text/html; charset=utf-8">
<title>SQLtest</title>
</head>
<body>
*** DB/SQLテスト ***
<?php
$mysql = new MySQL;
$sql = "SELECT * FROM staff";
$mysql->query($sql);
while($row = $mysql->fetch()){
echo $row["id"];
echo $row["name"];
echo "<br>";
}
?>
</body>
</html>
No.2
- 回答日時:
> while($row = mysql_fetch_array($this->m_rows)){
$this が間違いでは?
display_errors と error_reporting の設定を変更して
エラーを表示すればエラーが出ませんか?
この回答への補足
$thisの部分は書き換えましたが結果は変わりませんでした。
アドバイス頂いたエラー表示に関してはよくわからないのですが、
(info.phpで設定を調べたところdisplay_errors=on , error_reporting=81 でした)
もともと各処理ではdieを使ってエラー表示するようにしていましたが、
実行しても何も表示されませんでした。
実行すると「*** DB/SQLテスト ***」が表示されるだけで
ソースを見ても以下のようにインクルード直前で途切れています。
<html>
<head>
<meta http-equive="Content-type" content="text/html; charset=utf-8">
<title>SQLtest</title>
</head>
<body>
*** DB/SQLテスト ***<br>
No.1
- 回答日時:
とりあえず
while($row = mysql_fetch_array($this->m_rows)){
は
while($row = mysql_fetch_array($mysql->m_rows)){
じゃないですかね?
この回答への補足
早速ありがとうございます。
指摘の箇所を修正して実行してみましたがやはり結果は変わりませんでした。
mysql_fetch_arrayの部分はもともとmysql.php内で関数化されているのを
呼び出すコードだったのですが、なるべく問題箇所をDB接続くらいにまで
絞って示したかったので自分で中途半端に書き換えてしまったものでした。
すいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
宜しくお願いします。
-
phpのエラーについてです
-
PHP/MySQL SQLエラーについて。
-
データベースから多次元連想配...
-
MySQLのデータを使ってプルダウ...
-
phpでmysqlを使ってデータベー...
-
テキストボックスに入れた内容...
-
MYSQLからphpで取り出した...
-
SQL文が実行できません
-
OR検索を実装したい
-
連想配列、オブジェクト配列の...
-
phpで複数の検索語を検索対象に...
-
PHPについてなのですが未定義の...
-
会員サイトでログイン後の会員...
-
mysql_real_escape_string
-
SQL文の実行に失敗しました???
-
検索結果をgoogleのように数件...
-
DAOでデータベースを二つ開くに...
-
データをDBからひっぱってき...
-
ランダム文字列をDBにINSERT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルに入っているデータと...
-
sqlから多次元配列に要素を格納...
-
SQL文2つ実行
-
phpのエラーについてです
-
stringaddslashes 半角¥が消える
-
mysql_fetch_objectのエラー
-
XAMPPで画面が真っ白になります。
-
XAMMPが起動しません。
-
縦に長い<table>でなく横に長い...
-
PHP+mysqlでSQL文に文字数制限...
-
会員登録したらメールが送られ...
-
Resource id #3 をフィールドの...
-
MySQLのデータを使ってプルダウ...
-
PHPで絞り込み検索結果の件数を...
-
MySQLのUPDATE実行結果を受け取...
-
mysql_query等でレコード数を変...
-
住所録を作りたい
-
DB(MySQL)から複数行のデータを...
-
CSVをダウンロードさせた際、CS...
-
SQLの結果が返ってこない
おすすめ情報