• ベストアンサー

関数内で処理した内容を計算式で使用するには?

function dbcount($table,$category) { require_once'DB.php'; $username = "abc"; $password = "abc"; $host = "abc"; $database = "abc"; $db = DB::connect("mysql://$username:$password@$host/$database"); $sql = "select count(*) from $table where $id;"; $result = $db->query($sql); while($row = $result->fetchRow()){ echo $row[0]; } } $kazu = 5; if ( $kazu >= db("table","key=1") ) { echo "真"; } else { echo "偽"; } ――――――――――――――――――――――――― といった感じのプログラムなのですが、if文が正常に処理されずに困っています。 関数dbを実行すると60が帰ってくるので、本来ならば「偽」と表示され、るはずなのですが、何故か「真」が表示され、文字の左側には60が表示されています。 60は関数を使用した結果なのですが、ここに表示されているという事は、条件式の数字として認識されていないという事でしょうか? だとすれば、どのようにすれば正常に計算されるのでしょうか?

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>試しに関数の一番下の行(Whileを閉じた後)に「return $kaerichi;」を挿入し、 >echoで$kaerichiを表示させてみましたが、何も出てきませんでした。 $kaerichiには(関数内で)何をセットしたのでしょう?初期値0にしておいてwhileのLoop内でインクリメントしたのでしょうか(@推測モード)。またecho $kaerichiというのは関数のreturnの直前ですか?関数から戻ったら$kaerichiはスコープ外なので使えません。 私ならば function dbcount($table,$category) {   require_once'DB.php';     :    (略)     :   $sql = "select count(*) from $table where $id;";   $result = $db->query($sql);   retuen $result->numRows;   } としておいて   echo dbcount("table","key=1"); で確認しますかねぇ・・

shoichiexe
質問者

補足

う~ん、おっしゃっている通りのコードで実行してみましたが、何も表示されませんでした。 何処かおかしな部分があるようです。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>関数dbを実行すると60が帰ってくるので、 function「dbcount」は例示されていますが「db」はどうなっていますか?dbcountにはechoはありますがreturnが見当たりません(echoもLoopの中だし・・)。returnがないfunctionはいわゆるprocedure(subroutine)扱いだと思いますけど。   http://www.php.net/manual/ja/functions.returning-values.php

shoichiexe
質問者

補足

スミマセン!関数dbではなく、関数dbcountの間違いでした。 試しに関数の一番下の行(Whileを閉じた後)に「return $kaerichi;」を挿入し、echoで$kaerichiを表示させてみましたが、何も出てきませんでした。 まだ勉強したてでよくわからないのですが、この関数の場合はどういう風に入れるのがベストなのでしょうか?

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

考えられるのは、 データベースの該当フィールドの種別が、 数値ではなく文字列になるように設定されているなどがありますが、 intvalで文字列を数値に変換してみたらどうでしょうか。 $suuchi = intval($mojiretsu);

shoichiexe
質問者

補足

countでkey=1のものが何個あるか調べているだけなので、フィールドの種別は関係無いと思います。 dbcountの結果を数値型に型変換しようと試みたのですが、どうもいまいち上手くいきません。 $mojiretsu = db("table","key=1") ; $suuchi = intval($mojiretsu); としてみたのですが、$mojiretsuに60が代入されていないようで、変換の仕様がありません・・・。どうすればいいでしょうか?

関連するQ&A

  • PHPでの不思議なふるまいが理解できません。MySQLのデータ照合

    PHPでユーザーにURLでパラメーター付メールを送り、そのURLをクリックするとMySQLに保存されているユーザー名「hoge」というレコード内のsignという項目の値が0なら1にするというプログラムを書いています。 phpadminでsignが0なのを確認しているのに、URLをクリックしてプログラムを走らせると、//■■■■(3)■■■■の場所で終わってしまいます。(つまり0だと認識されていない?)その場合、echo $pass;の表示はなぜか1です。 echo $pass;は、//■■■■(2)■■■■のsignを1にする前の処理なのになぜ前もって1となるかが分からない点です。 そこでコメントされている■■■■(1)■■■■のexit;を、コメントアウトさせてからプログラムを走らせるとecho $pass;の表示は0です。 この現象が分かる方は教えて欲しいです。 宜しくお願いします。 //(これより以前省略) $db = mysql_connect($db_host,$db_user,$db_passwd); $sql = "select * from $db_table where username like 'hoge'"; $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); //■■■■MySQLに保存されているデータを抜き出し $row = mysql_fetch_array($result); $sign = $row{'sign'}; $pass = $row{'password'}; echo $pass; //■■■■メールに書いてあるクリックされたURLの分解 $a = explode('&', $_SERVER['QUERY_STRING']); $urlpass = split('=', $a[1]); //exit;//■■■■(1)■■■■ if ( $sign == 0 ){ if ( $urlpass == $pass ){sign $sql = "update $db_table set sign = 1 where username like 'hoge'";■■■■(2)■■■■ $result = mysql_query($sql) or die("SQLに失敗しました".mysql_error()); if ($result){ echo"認証できました。"; } }else{ echo"認証できません。"; } }else{//$signが0以外なら echo"認証済みです";//■■■■(3)■■■■ }

    • ベストアンサー
    • PHP
  • エラーが出ます。myswl

    <?php $_POST['form']; $db_server = "mysql84.heteml.jp"; $db_username = "******"; $db_password = "******"; $mysql = mysql_connect($db_server, $db_username, $db_password); if ($mysql) { $table_name= "kensaku"; $mysql= ""; mysql_select_db($table_name, $mysql); mysql_set_charset("ECU"); $sql = "SELECT kai, tiiki, syoku, kei FROM kensaku" . "WHERE tiiki = '" . mysql_real_escape_string($tiiki) . "'"; $result = mysql_query($sql); if ($result) { $data_count = mysql_num_rows($result); for($i = 0; $i < $data_count; $i++) { $row = mysql_fetch_row($result); $j = 0; $data[$i]['kai'] = $row[$j++]; $data[$i]['tiiki'] = $row[$j++]; $data[$i]['syoku'] = $row[$j++]; $data[$i]['koyou'] = $row[$j++]; } mysql_free_result($result); } else { $error['top'] = "データベースのエラーです。" . mysql_error(); } mysql_close($mysql); } if (isset($error)) { echo $error['top']; } else { for($i = 0; $i < $data_count; $i++) { echo $data[$i]['kai'] . "|" . $data[$i]['tiiki'] . "|" . $data[$i]['syoku'] . "|" . $data[$i]['koyou'] . "<br />"; } } ?> 書き忘れとかあればおしえてください。

    • 締切済み
    • PHP
  • 実行結果に連番を振る方法

    こんにちは。 以下を実行すると、ブラウザに結果x, 結果x, 結果x・・・と表示されます。 xの部分を1, 2, 3・・・とさせたいのですが、うまくできません。 ご教示頂けませんか? 宜しくお願い致します。 <?php //データベース接続 $server = "127.0.0.1"; $userName = "root"; $password = "password"; $dbName = "tweet01"; $mysqli = new mysqli($server, $userName, $password,$dbName); if ($mysqli->connect_error){ echo $mysqli->connect_error; exit(); }else{ $mysqli->set_charset("utf-8"); } $sql = "SELECT * FROM tweet_tbl"; $result = $mysqli -> query($sql); //クエリー失敗 if(!$result) { echo $mysqli->error; exit(); } //レコード件数 $row_count = $result->num_rows; //連想配列で取得 while($row = $result->fetch_array(MYSQLI_ASSOC)){ $rows[] = $row; } //結果セットを解放 $result->free(); // データベース切断 $mysqli->close(); ?> <!DOCTYPE html> <html> <body> <table border='1'> <tr><td>結果</td></tr> <?php foreach($rows as $row){ ?> <tr> <td><a href='wxyz.php?id=$row['id']; ?'>結果x</a></td> </tr> <?php } ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • PDOでの検索システムについて

    プログラミング初学者です。 過去に検索システムを作る時にmysqlを使っていましたが、今回PDOを使った簡単な検索の仕組みを作ってみています。 実際に動作確認してみると検索結果で何もでず、var_dumpで確認してみるとNULLとなってしまいます。 いろいろ調べているのですが、PDOを使った場合の検索条件の部分の書き方がイマイチよくわかりません。 そしてだんだん深みにはまって迷走してしまっています。。。 アドバイスをいただけないでしょうか。 【検索フォーム(search.php)】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果(result.php)】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } $sql= "select * from shop where area='" . $_POST["area"] . "' "; $shop = array(); foreach ($dbh->query($sql) as $row) { array_push($shop, $row); } ?> <body> <?php foreach ($salon as $row) : ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['station'],ENT_QUOTES,'UTF-8'); ?> <?php endforeach; ?> </body> </html> ※ $sql= "select * from shop where area='" . $_POST["area"] . "' "; の部分に原因があるのかと私は考えています。 $sql= "select * from shop; とした場合は全件表示されるからです。 見難いコードで申し訳ありませんが、アドバイス頂ければ幸いです。

    • ベストアンサー
    • PHP
  • PHPで同じページに似た内容のデータベースを表示

    PHPで同じページに同じデータベース(table)から別の条件でリストを表示させています。 もっと簡単でスマートな方法はないか、ご質問させていただきます。 【表示例】 <鈴木さん> 鈴木たろう 090-0000-0000 鈴木まさゆき 080-0000-0000 鈴木あきこ 03-0000-0000 <佐藤さん> 佐藤まさる 090-0000-0000 佐藤ともみ 080-0000-0000 佐藤けいこ 03-0000-0000 【PHP】 <?PHP $sql = "SELECT name, tel FROM table"; $sql .= " WHERE name LIKE '%鈴木%'"; $recordSet = mysql_query($sql); $rows = mysql_num_rows($recordSet); if($rows){ while($row = mysql_fetch_array($recordSet)) { $table .= "".$row['name'].""; $table .= " ".$row['tel']."<br>"; $table .= "\n"; } } echo "<鈴木さん><br>"; echo $table; mysql_free_result($recordSet); ?> <?PHP $sato_sql = "SELECT name, tel FROM table"; $sato_sql .= " WHERE name LIKE '%佐藤%'"; $sato_recordSet = mysql_query($sato_sql); $sato_rows = mysql_num_rows($sato_recordSet); if($sato_rows){ while($sato_row = mysql_fetch_array($sato_recordSet)) { $sato_table .= "".$sato_row['name'].""; $sato_table .= " ".$sato_row['tel']."<br>"; $sato_table .= "\n"; } } echo "<佐藤さん><br>"; echo $sato_table; mysql_free_result($sato_recordSet); ?> 上記のように、同じデータベース(table)から、 「鈴木さん」「佐藤さん」それぞれ条件を設定して表示していますが、 もっと簡単に短いコードで表示させることは可能でしょうか。 また、可能であれば、それを何と呼べば(検索すれば)宜しいのでしょうか。 お願い致します。

    • ベストアンサー
    • PHP
  • テーブルの内容を<a>タグでくるんだ時のアンカー

    下記のPHPスクリプトにおいて、テーブルの内容を<a>タグで 挟み、データベースの内容を表示しているのですが、 先頭レコードのアンカーだけが表示されず、ただのテキストになってしまいます。 二番目以降のレコードはテーブルの内容がアンカー付きで表示されるのですが、 先頭レコードにアンカーをつけるには、どこがまちがっているのか ご指導お願いいたします。 mysql_set_charset("utf-8"); //$sql = "SELECT * FROM hospytal;"; //$result = mysql_query($sql, $con) or die(mysql_error()); if($_POST['radio_btn']==="1"){ $sql = "SELECT * FROM hospytal order by manzokudo desc;"; // 満足度の降順 $result = mysql_query($sql, $con) or die(mysql_error()); }else{ $sql = "SELECT * FROM hospytal order by kuchikomi desc;"; // 口コミ数の降順 $result = mysql_query($sql, $con) or die(mysql_error()); } $rowco = mysql_num_rows($result); // テーブルの行数 for($i=0; $i<$rowco; $i++){ $row = mysql_fetch_row($result); // 取得された行に対応する配列を返し、内部のデータポインタを前に進める echo '<a href="'.$i.'.php?sid='.$row[0].'">'; echo '<table width="500" height="120" border="1">'; echo '<tr>'; echo '<td width="500" height="30">'.$row[1].'</td>'; echo '</tr><tr>'; echo '<td width="500" height="30">'.$row[4].'&nbsp;&nbsp;&nbsp;'.$row[5].'件</td>'; echo '</tr><tr>'; echo '<td width="500" height="30">'.$row[7].'</td>'; echo '</tr><tr>'; echo '<td width="500" height="30">'.$row[9].'</td>'; echo '</tr>'; echo '</table>'; echo '</a>'; } mysql_close($con); // データベースとの接続を解除する

    • ベストアンサー
    • PHP
  • 管理者がパスワードのユーザー名で管理ページへログインできるようにしたい

    管理者がパスワードのユーザー名で管理ページへログインできるようにしたいのですが、どこの部分に ユーザーIDやパスワードを設定すれば良いのかわかりません;_;(長いので所々はしょってます) どなたか教えてください。 $username=isset($_POST['username'])?$_POST['username']:""; $password=isset($_POST['password'])?$_POST['password']:""; $database_name=isset($_POST['database_name'])?$_POST['database_name']:""; $database_host=isset($_POST['database_host'])?$_POST['database_host']:"localhost"; $database_username=isset($_POST['database_username'])?$_POST['database_username']:""; $database_password=isset($_POST['database_password'])?$_POST['database_password']:""; $product_code=isset($_POST['product_code'])?$_POST['product_code']:"";      $server_path=str_replace("\\","\\\\",$server_path); } /*else if (file_get_contents("http://www.bpowerhouse.com/bph_adminpanel/pr_validate.php?code=".$product_code)!=1) { echo "<span style='color:red;'>Your product code is wrong!</span><br/>"; }*/ else { if(is_writable("includes/")){ $f=@fopen("includes/passwd.inc.php","w+"); $database_inf='<?php $DbHost = "'.$database_host.'"; // The host where the MySQL server resides $DbDatabase = "'.$database_name.'"; // The database you are going to use $DbUser = "'.$database_username.'"; // Username $DbPassword = "'.$database_password.'"; // Password $server_path= "'.$server_path.'"; ?>'; i

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

    $server = "localhost"; $database = "hoge"; $user = "user"; $pass = "pass"; $con = mysql_connect ($server, $user, $pass); mysql_select_db ($database, $con); $sql = "SELECT * "; $sql.= "FROM `table` "; while ($result = mysql_fetch_array ($rs, MYSQL_ASSOC)) { echo $result[hoge]; } 上記と同じことを下記のようなクラスにして db.php class db { $server = "localhost"; $database = "hoge"; $user = "user"; $pass = "pass"; function __construct() { $this->con = mysql_connect ($this->server, $this->user, $this->pass); mysql_select_db ($this->db, $this->con); } function query($sql){ $rs = mysql_query ($sql); return mysql_fetch_array ($rs, MYSQL_ASSOC); } hoge.php $db = new db(); $sql = "SELECT * "; $sql.= "FROM `table` "; while ($db->query($sql)) { echo $result[hoge]; } のようにしたのですが、うまくいきません。 function query($sql){ $rs = mysql_query ($sql); $result = mysql_fetch_array ($rs, MYSQL_ASSOC); } とすると一行はとれるのですが、複数行とるにはどうしたらいいのでしょうか・・・ どうかよろしくお願いします。

    • 締切済み
    • PHP
  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • ODBCを使用したSQLの使い方を教えてほしいです

    タイトルの内容を調べているのですが、上手くヒットせず、 同じように記述してもエラーになってしまいます。 よくわかりませんので、教えてほしいです。 odbc_connectは通っているようなので、接続はできている と思います。 $rs=odbc_exec($conn,$sql);にてエラーになるようです。 Warning: odbc_exec():が出ます。 よろしくお願いします。 print ("<html>"); print ("<body>"); $conn=odbc_connect('m_db','',''); if (!$conn) { exit("Connection Failed: " . $conn); } $sql = "SELECT * FROM test_table"; $rs=odbc_exec($conn,$sql); if (!$rs) { exit("Error in SQL"); } echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>"; while (odbc_fetch_row($rs)) { $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName"); echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; } odbc_close($conn); echo "</table>"; print ("</body>"); print ("</html>");

    • ベストアンサー
    • PHP

専門家に質問してみよう