PHPのmysql_queryの変数について

このQ&Aのポイント
  • ログイン情報のチェックに使うクラスを調べている際、mysql_queryの結果が表示されない問題が発生しました。
  • mysql_query関数の結果が表示されない原因を知りたいです。
  • ご教授頂ける方がいらっしゃいましたら、お願いいたします。
回答を見る
  • ベストアンサー

PHPのmysql_queryの変数について

PHPのmysql_queryの変数について 全くの初心者です。 ログイン情報のチェックに使うクラスを調べているのですが、 mysql_queryの結果が表示されなく、原因が分かりません。 ご存知の方がおられましたら、ご教授頂けませんでしょうか。 よろしくお願い致します。 以下が全体のコードです。(1)(2)の問題があります。 <?php require_once "BaseDB.class.php"; // ログインをするクラス class Settings extends BaseDB { // ユーザ認証 public function isValidUser( $id, $pass ) { //var $qstring; // SQL文 //var $qresult; // mysql_query関数の結果 //var $fresult; // mysql_fetch_arrayの結果 $this->errors = 0; // MySQLにデータがあるか調べる $qstring = "select passwd from b_settings where username='$id'"; //クエリを実行 echo "setting class:<br>"; echo "qstring:<br>"; echo "$qstring<br />";//select passwd from b_settings where username=unknown $qresult = mysql_query($qstring); echo "qresult:<br>"; ////// (1)ココが表示されない。 echo "$qresult<br>"; if(!$qresult) { echo $qresult; $this->errorm = "ユーザ名が違います。table Error";////////// (2)このエラーが出てしまいます。 $this->errors++; return false; } if(!$fresult = mysql_fetch_array($qresult)) { $this->errorm = "ユーザ名が違います。"; $this->errors++; return false; } //echo "$pass /" . $fresult['passwd'] . "<br>"; if( $pass == $fresult['passwd'] ) { //echo "$pass /" . $fresult['passwd'] . "<br>"; return true; } else { $this->errorm = "パスワードが違います。"; $this->errors++; return false; } }//関数終了 public function loadSettings( $id='' ) { $qstring = "select maintitle,subtitle,maxtopics," . "username,passwd,mailaddr from b_settings where id=1"; //クエリを実行 $qresult = mysql_query($qstring); if(!$qresult){ $this->errorm = "DB Error:[$qstring]"; $this->errors++; return false; } if(!$fresult = mysql_fetch_array($qresult)) { $this->errorm = "設定情報がありません。"; $this->errors++; return false; } $this->maintitle = $fresult['maintitle']; $this->subtitle = $fresult['subtitle']; $this->maxtopics = $fresult['maxtopics']; $this->username = $fresult['username']; $this->passwd = $fresult['passwd']; $this->mailaddr = $fresult['mailaddr']; return true; } public function saveSettings( $id='' ) { $qstring = "update b_settings set ". "maintitle = '$this->maintitle', ". "subtitle = '$this->subtitle', ". "maxtopics = '$this->maxtopics', ". "username = '$this->username', ". "passwd = '$this->passwd', ". "mailaddr = '$this->mailaddr' ". " where id=1"; //クエリを実行 $qresult = mysql_query($qstring); if(!$qresult){ $this->errorm = "DB Error:[$qstring]"; $this->errors++; return false; } return true; } // プロパティ参照 function __get( $property ) { return $this->$property; } // プロパティセット function __set( $property, $value ) { $this->$property = $value; } } //クラス終了 ?>

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

クラス設計の上ではこっちも参考になるかも・・・ http://qiita.com/mpyw/items/6bd99ff62571c02feaa1 https://github.com/Certainist/sns_php 生のPDOが書きにくければこういった継承クラスも活用してください。 https://github.com/Certainist/PDO2

その他の回答 (1)

noname#244856
noname#244856
回答No.1

問題点を多く抱えているので、まずは下記のまとめをご覧ください。 PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 なお、PDOでは PDO::ERRMODE_EXCEPTION を有効にしていれば、今回のようなSQLエラー時には自動的に例外がスローされるのですぐミスに気づけます。 (非推奨) 一応Mysql関数でのエラーの原因はmysql_error()で確認はできます。

関連するQ&A

  • mysql_queryがある場所について

    ZendFramework-1.11.7を使用しています。 Zend_DbでPdo_Mysqlで接続して利用しています。 そこで、クエリを実際に実行している箇所を探しているのですが、 ソースの中にmysql_queryが見つからないのです・・・ PHPとかでSQLを発行したい場合にはmysql_queryでやるんですよね?? ┬ Zend │└ Db │ ├ Statement.php ファイルには public function execute(array $params = null) { /* * Simple case - no query profiler to manage. */ if ($this->_queryId === null) { return $this->_execute($params); } があるのですが、これは $this->_execute($params); を実行していて ┬ Zend │└ Db │ ├ Statement │ │ ├ Pdo.php ファイルには public function _execute(array $params = null) { try { if ($params !== null) { return $this->_stmt->execute($params); } else { return $this->_stmt->execute(); } があるのですが、これは $this->_stmt->execute(); を実行しているようなのです。 なんか行ったり来たり(^^;)していて最終的にどこでSQLを発行(mysql_queryを実行)しているのかが フォルダ全体を文字列検索しても見つからないのです・・・ _stmtが何のオブジェクトなのかが定かではないので、追跡しづらいのかもしれませんが、 どこでSQLを発行しているのか教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql_queryの戻り値

    $return_obj = mysql_query($sql); mysql_query()が正常にSQL文が行われた場合、if(true){}にしたいのですが、 どのようにすればよいですか? return値を↓のようにしても、かならずしもtrueにはならないと聞いたのですがどうなんでしょうか? if($return_obj){} 宜しくお願いします。

  • PHP+MySQLでrollback出来ない

    PHP5 + MySQL5環境です。 以下のようなソースでロールバックさせたいのですが、 実行後、「phpMyAdmin」というDB操作ツールで対象テーブルを見てみると データが登録されてしまっています。(ロールバック出来ていない!?) どなたか原因がお解りでしたらご教授の程宜しくお願い致します。m(_ _)m ※ソースが見難いので、画像で見やすいものを添付します。 ※尚、catch句のデバッグは「bool(true) ロールバック実行」と返ってきます。 //***メイン処理ソース***************************** $sObj = new SQL_Controller(); $res = $sObj->tran_start(); if(!$res) exit; try{ //DB登録------------------ $res1 = $sObj->Customer_mst_Insert($_SESSION['CustomerInfo']); if(!$res1) throw new Exception("Customer_mst_Insert error"); throw new Exception("★rollbackテストの為、ここでワザとthrowしてみる★"); //コミット------------------ $sObj->tran_commit(); } catch(Exception $e) { //異常時はロールバックする-- $res = $sObj->tran_rollback(); var_dump($res); echo "ロールバック実行"; } //***↑メイン処理終わり。以下クラス。***************************** class SQL_Controller extends MySQL{ } class MySQL{ function query($sql){ //クエリ実行 return mysql_query($sql); } function tran_start(){ //■トランザクション開始------ try{ $res = $this->query("set autocommit = 0"); if(!$res) throw new Exception(); $res = $this->query("begin"); if(!$res) throw new Exception(); } catch(Exception $e) { return false; } return true; } function tran_commit(){ //■コミット------ return $this->query("commit"); } function tran_rollback(){ //■ロールバック------ return $this->query("rollback"); } }

    • ベストアンサー
    • PHP
  • php+MySqlでの検索結果について

    以下のソースで検索結果が表示されるのですが、検索結果が多数ある場合、例えば10件ずつ表示して「次へ」「前へ戻る」「最終頁」等のリンクを貼る方法が分かりません。 また、検索結果から並べ替え(データの更新日時等から)も出来ればと思い質問させていただきました。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>検索</title> </head> <body> <?php # 入力値に不正なデータがないかなどをチェック。 function checkInput($var) { if (is_array($var)) { return array_map('checkInput', $var); } else { if (get_magic_quotes_gpc()) { // magic_quotes_gpc対策 $var = stripslashes($var); } if (preg_match('/\0/', $var)) { // NULLバイト攻撃対策 die('不正な入力です。'); } if (!mb_check_encoding($var, 'UTF-8')) { // 文字エンコードの確認 die('不正な入力です。'); } return $var; } } function h($string) { // HTMLでのエスケープ処理をする return htmlspecialchars($string, ENT_QUOTES); } # POSTされたデータをチェック。 $_POST = checkInput($_POST); // データベース設定 $dbServer = 'localhost'; $dbUser = 'user'; $dbPass = 'password'; $dbName = 'sample'; $flag = TRUE; // MySQLデータベースに接続 if (!$link = mysql_connect($dbServer, $dbUser, $dbPass)) { $flag = FALSE; } // データベース選択 else if (!mysql_select_db($dbName, $link)) { $flag = FALSE; } // 文字エンコードの指定(PHP5以降かつMySQL 4.1以降) else if (!mysql_set_charset('utf8', $link)) { $flag = FALSE; } # $flagの値の判定 if ($flag === FALSE) { echo 'データベースエラー'; } else if (isset($_POST['data'])) { $data = $_POST['data']; $dataList = explode(' ', mb_convert_kana($data, 's')); $sql = 'SELECT * FROM search WHERE 1'; foreach ($dataList as $word) { if ($word == '') continue; $sql .= sprintf(" AND data LIKE '%s'", '%' . mysql_real_escape_string($word) . '%'); } echo '<p>SQL: ' . h($sql) . '</p>'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else if (mysql_num_rows($query) == 0) { echo '<p>「' . h($data) . '」はデータベースに登録がありません。</p>'; } else { echo '<p>「' . h($data) . '」はデータベースに登録がありました。</p>'; echo '<p>検索結果</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } $sql = 'SELECT * FROM search'; $query = mysql_query($sql, $link); if (!$query) { echo 'データベースエラー'; } else { echo '<p>データベースの内容一覧</p>'; echo '<table border="1">'; echo ' <tr>'; echo ' <th>ID</th>'; echo ' <th>データ</th>'; echo ' </tr>'; while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { echo ' <tr>'; echo ' <td>' . h($row['id']) . '</td>'; echo ' <td>' . h($row['data']) . '</td>'; echo ' </tr>'; } echo '</table>'; } } ?> <form method="post" action=""> <p>検索ワードを入力して下さい</p> <input type="text" name="data" /> <input type="submit" value="検索する" /> </form> </body> </html> このソースのどの部分に記述してよいのか等も含めてご伝授頂きたく思います。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • php+mysql

    $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); val_dunpを使い確認したところ bool(false) >となってしまい失敗します falseに返さないようにするにはどうしたらいいでしょうか? 簡易掲示板作成 タイトル 本文記載後下にタイトル 本文 書き込み日時が 書き込まれていく仕組みです <?php $link = mysql_connect('localhost','user','pass','dbname'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT * FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].'<br>'; } ?> </body> </html>

    • ベストアンサー
    • MySQL
  • PHP+MYSQLについて質問です。

    PHP+MYSQLについて質問です。 フォームに入力した電話番号が、 データベースに登録されている電話番号と重複している場合重複している件数を表示するようにしたいのですが、どうにもうまくいきません。 どなたかわかる方いらっしゃいませんか? 現状がこんな感じになっています。 よろしくお願いします。 ■test.class.php class test{ public function counttest($tel){ $qstring = "select (*) from _test where tel = '$tel'"; $qresult = mysql_query($qstring); if(!$fresult = mysql_fetch_row($qresult)){ $this->errorm = "該当データなし"; return false; }else{ $this->telcount = $fresult[0]; } } } ■test.php require_once ("test.class.php"); require_once ("Smarty.class.php"); $settings = new test; $smarty = new Smarty(); $telcount = $test->counttest($tel); $smarty->assign("telcount",$telcount); $smarty->display("top.tpl");

    • ベストアンサー
    • PHP
  • php mysqlについて

    初心者です宜しくお願いします。 phpからデータベースを使いたいのですが(mysql)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • php+MYSQL

    タイトル 本文 書き込み後保存を押すと 下に書き込み保存されていく形です タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 エラー自体は出てないのですが書き込みが反映されません val_dunpで調べたところ resource(7) of type (mysql result) > このように出てきましたなにか文自体に必要なものがないのでしょうか? <?php $link = mysql_connect('localhost','user','pass'); if (!$link) { die('接続に失敗しました。'.mysql_error()); } $db_selected = mysql_select_db('ogawa',$link); if(!$db_selected) { die('データベース選択に失敗しました。'.mysql_error()); } $res = mysql_query('SELECT * FROM test'); if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; $kakikomi = $_POST['kakikomi']; if ( $subject !=='' && $honbun !=='' && $kakikomi !=='' ) { $query = " INSERT INTO test ( " ."subject," ."honbun," ."kakikomi," .") VALUES ( " . "'" . mysql_real_escape_string( $link, $subject ) ."', " . "'" . mysql_real_escape_string( $link, $honbun )."'," . "'" . mysql_real_escape_string( $link, $kakikomi)."'," ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysql_query($query,$link); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = 'SELECT id,subject,honbun,kakikomi FROM test'; $res = mysql_query($query,$link); $data = array(); var_dump($res); if ($res) { while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].''.$val['kakikomi'].'<br>'; } ?> </body> </html>

  • php+mysql

    Warning: mysql_query() expects parameter 1 to be string, resource given in C:\xampp\htdocs\phptest\test6.php on line 30 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in C:\xampp\htdocs\phptest\test6.php on line 32 このようなエラーが出てしまいます line30 $res = mysql_query($link,$query); line32 while($row = mysql_fetch_assoc($res)) { 戻り値がおかしいのでしょうか? 下の分の falseを使っているところが問題なんでしょうか? <?php $link = mysql_connect('localhost','ogawa','taku1106','ogawa'); if ( $link !==false) { $msg =''; $err_msg =''; if ( isset( $_POST['send'] )=== true) { $subject =$_POST['subject']; $honbun =$_POST['honbun']; if ( $subject !=='' && $honbun !=='' ) { $query = " INSERT INTO ogawa ( " ."subject," ."honbun," .") VALUES ( " . "'" . mysqli_real_escape_string( $link, $subject ) ."', " . "'" . mysqli_real_escape_string( $link, $honbun ) . "'" ." ) "; $kakikomi = date('Y-m-d h:i:s'); $res = mysqli_query($link,$query); if ($res !==false) { $msg = '書き込みに成功しました。'; }else{ $err_msg = '書き込みに失敗しました。'; } }else{ $err_msg = 'タイトルと本文を書き込んで下さい。'; } } $query = "SELECT id,subject,honbun,kakikomi FROM ogawa"; $res = mysql_query($link,$query); $data = array(); while($row = mysql_fetch_assoc($res)) { array_push($data,$row); } arsort($data); }else{ echo"データベースの接続に失敗しました"; } mysql_close($link); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> </head> <body>> <table border="1"> <form action="test6.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php if ($msg !=='')echo'<p>'.$msg.'</p>'; if ($err_msg !=='')echo'<p style="color:#f00;">'.$err_msg.'</p>'; foreach($data as $key =>$val) { echo $val['subject'].''.$val['honbun'].'<br>'; } ?> </body> </html>

専門家に質問してみよう