• ベストアンサー

phpMyadminとPHP上からの違い?

おせわになります よろしくお願いします SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%' というSQL文があり、 phpMyadmin上からSQLを実行すると 4と表示されるのですが PHPから $sql = "SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_row($result); とすると0、$row[0]は0となります 特にエラーの表示もなく データベースへの接続も問題ないようなのですが 原因がわかるかたいらっしゃいましたら 教えて下さい 以上よろしくお願いします

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

'%文字%'の部分を漢字以外のもの、たとえば'%a%'とかそういうのでも カウントがとれませんか? 既出でありますが、漢字がうまく渡ってないのが可能性としてはもっとも 有力な気がしますが・・・

SAY_MAN
質問者

お礼

ご回答ありがとうございます 漢字以外で試してみたらうまく行きました!! が、検索するものが漢字なので SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 で取得して、PHPのプログラムの方で分ける方法で対処しました 解決ではないのですがとりあえずこれでいこうと思います みなさまいろいろとありがとうございました また機会があればよろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

回答No.6

あ、mysql_db_queryと間違えました。m(_ _)m $connは正常な値が入っているか、データベースの選択はできているか、 を確認してみればいいのではないでしょうか。

SAY_MAN
質問者

補足

ご回答ありがとうございます 返事が遅くなってしまって申し訳ありません SELECTの前にINSERT文を使用してデータを追加してみましたが 意図していたテーブルに追加できましたので データベースの選択は出来ているようです

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

> $result = mysql_query($sql,$conn); 手元にある解説書によると、引数は mysql_query(DB名, SQL文, 接続ID) の順番になってますが。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

文字コードは大丈夫ですよね?

SAY_MAN
質問者

補足

回答ありがとうございます 文字コードはデータベース、phpファイルともにEUC-JPになっています

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

$row = mysql_fetch_array($result); print_r( $row); として、$rowになにか格納されていませんか?

SAY_MAN
質問者

補足

お返事ありがとうございます Array ( [cnt] => 0 ) というのが表示されます

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> $row = mysql_fetch_array($result); 第2引数に、連想配列用のMYSQL_ASSOCを指定していないところが、 No.1さんの回答と食い違っています。 うまくいかない原因は、それではないでしょうか?

SAY_MAN
質問者

補足

ご指摘ありがとうございます すみません書き忘れでした $sql = "SELECT COUNT(*) AS cnt FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_array($result,MYSQL_ASSOC); print $row['cnt']; で実行して同じ結果でした どうもすいません

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

COUNTやSUMの戻りはSQL側で別名をつけて、PHP側で配列で受けます 以下のようにしてください $sql = "SELECT COUNT(*) AS COUNT FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_array($result,MYSQL_ASSOC); print $row['COUNT'];

SAY_MAN
質問者

補足

早速のご回答ありがとうございます やってみたのですが 結果は同じでした $sql = "SELECT COUNT(*) AS cnt FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_array($result); print $row['cnt']; あと、サーバーはロリポップさんを使用しています すみませんがよろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • mysqlからphpで値を取得する

    こんにちは、php初心者のBlackwinglsです。 mysql上に住所録があります。 mysql> select count(*) from jyusyo where seibetu = 'man' and name = 'tanaka'; とやると男性の田中さんは、6名と表示されます。 これをphpでやりたいのですが、 $sql ="select count(*) from jyusyo where seibetu = 'man' and name = 'tanaka'"; $result = mysql_query($sql,$con); ここから先の記述がよく分かりません。 mysql_fetch_array や mysql_result 等を試してみたんですが、基本的な事が分かってないので当然上手く動いてくれません(^^;) どなたかアドバイスを頂けたら幸いです。 環境 apache 1.3.26 mysql 3.23.49 php 4.1.2 ps php初心者にお勧めのWebPageありましたらあわせて紹介ください。

    • ベストアンサー
    • PHP
  • PHP+MySQL

    PHP4で、MySQLに接続しています。 $connには、接続IDが格納されています。 以下のスクリプトで、「エラー」が出てしまうのですが、何故でしょうか? $sql = "SELECT (User_num, User_name, User_pass) FROM User WHERE User_name='$login_name'"; if (!$result= mysql_query($sql, $conn)){ die (print ("エラー")); } SQL文を、 SELECT (User_num) FROM User WHERE User_name='$login_name' と書き換えるとうまくいきます。複数にするとエラーというのはどうしてでしょう

    • ベストアンサー
    • MySQL
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • MySQLのテーブル連結でクエリに4分以上かかる

    初めまして、よろしくお願いします。 現在PHPよりアクセスするクエリを作成しています。 mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%'; Empty set (4 min 42.79 sec) 上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。 テーブル内のレコード数としては以下のようになっています。 mysql> select count(*) from articles; +----------+ | count(*) | +----------+ | 738338 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from titles; +----------+ | count(*) | +----------+ | 34821 | +----------+ 1 row in set (0.00 sec) できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。 これは、やはりハードウェアの性能限界なのでしょうか? またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか? どなたかヒントでも頂ければ幸いです。 ぜひ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • mySQLで結果が無いときの処理

    $sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

    • ベストアンサー
    • PHP
  • phpでmysqlを検索、計算

    PHPでmysql内のデータを、条件で絞込み、 一致するものの平均と個数を画面で表示したいのですが、 エラーが表示され、検索結果を表示することができません 現在書いているコードは以下になります ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <html> <head> <title>検索結果</title> </head> <body> <?php ~~省略~~ $Name = $_POST['namae']; $Day = $_POST['hiduke']; $conn = mysql_connect($url,$user,$pass); $sdb = mysql_select_db($db,$conn); $sql1 = select avg(score) from seiseki where name = "$Name" and day like "$Day*"; $sql2 = select count(score) from seiseki where name = "$Name" and day like "$Day*"; $sql3 = select count(score) from seiseki where name = "$Name" and day like "$Day*" and score = 1; $res1 = mysql_query($sql1); $res2 = mysql_query($sql2); $res3 = mysql_query($sql3);  print "<table border=1 cellpadding=0 cellspacing=0>\n";  print "<tr>\n";  print "<td>合計</td>";  print "<td align=right>{$sql2}回</td>;"  print "</tr>\n";    print "<tr>"; print "<td>1</td>";  print "<td align=right>{$sql3}回</td>;"  print "</tr>\n";    print "<tr>\n";  print "<td>平均</td>";  print "<td align=right>{$sql1}</td>";  print "</tr>\n";  print "</table>\n"; mysql_free_result($res,&res2,&res3); mysql_close($conn); ?> </body> </html> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー seisekiテーブルにはnameとdayとscoreがあり、 nameはyamadatarouのようにローマ字で dayは20110110のように数字で scoreには1~4の数字が入っています nameは完全一致、dayは前方一致で sql1では数字の平均、sql2では合計回数、sql3では1の回数をカウントしています 30行目「$sql1 = select avg(score) ~ ~ ~」のあたりに記述エラーがあると表示されるので、 おそらく検索方法の文法が間違っているのですが、 色々調べてみても記述の仕方がこの方法以外見つかりません 何か記述方法の間違いや別の記述方法がありましたら、ご教授お願いいたします また、現在エラーは表示されていませんが、 print近辺も見ようみ真似での記述ですので、間違いなどがありましたら ご教授いただけないでしょうか

    • ベストアンサー
    • PHP
  • SQLによって計算した変数を次のSQLに代入できますか?

    user(テーブル) id | name | bango 1 | taro | 1001 2 | sato | 1012 3 | miho | 1027 4 | hiro | 1066 *idはautoincrement、bangoはユニークの値 mark(テーブル) id | check | bango 1 | 0 | 1001 2 | 1 | 1001 3 | 1 | 1001 4 | 0 | 1012 5 | 0 | 1012 6 | 1 | 1027 7 | 1 | 1027 8 | 0 | 1066 *idはautoincrement、checkは1か0、bangoはユニークの値 checkが1の確立が高い順にnameを一覧表示したいのですが、 うまく2つのテーブルを繋げることができません。 queryによって計算した変数を次のqueryに代入することはできるのでしょうか? 具体的には以下のような感じです。 bangoが1001のcheck=1の確立を出す場合 //bangoが1001の数 $test1 = mysql_query("select count(id) from mark where bango='1001';",$conn $row1 = mysql_fetch_array($test1, MYSQL_ASSOC); $totalct1 = $row1["count(id)"]; //bangoが1001かつcheckが1の数 $test2 = mysql_query("select count(id) from mark where bango='1001' and check='1' ;",$conn) $row2 = mysql_fetch_array($test2, MYSQL_ASSOC); $totalct2 = $row2["count(id)"]; //bangoが1001かつcheckが1の確立 if($totalct2==0){ $kakuritu = '0' ; } else{ $kakuritu = $totalct2 / $totalct1 * 100 ; } 上記の変数を下記のように入れ込むことはできないのでしょうか? $test3 = mysql_query("select name from user order by $kakuritu ;",$conn)

    • ベストアンサー
    • MySQL
  • forで無限ループになっていないかどうか

    各アイテムの最新3件だけデータベースに残したいと思い、下記のようにしてみました。 動作を確認したところ問題なかったのですが、何か(無限ループする可能性があるなど)問題があるようでしたら、ご指摘いただけないでしょうか。 よろしくお願いいたします。 for ($num = 1; $num < 21; $num++){ // アイテムが20件ある場合 $sql = "SELECT COUNT(id) AS cnt FROM item where item_id=$num ;"; $res = mysql_query($sql, $conn) or die; $row = mysql_fetch_array($res, MYSQL_ASSOC); $count = $row["cnt"]; if($count<3){ // アイテムが3件より少なかったら何もしない } else{ $delete_count=$count-3; $sql = "delete from item where item_id=$num order by date limit $delete_count;"; $res = db_query($sql, $conn); } }

    • ベストアンサー
    • PHP
  • SQLのどこがおかしいでしょうか?

    PHP4、MySQLです。 for($i=1;$i<34;$i++){ $sql = "select count(group) as cnt".$i." "; $sql.= "from stock "; $sql.= "where group=".$i." "; //print "sql= ".$sql."<br>"; $result = mysql_query($sql,$db) or die("失敗しました".mysql_error ()); $Row = mysql_fetch_array($result, MYSQL_ASSOC); $cnt.$i = $Row['cnt".$i."']; } としています。どこがおかしいでしょうか? 教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mysql_query等でレコード数を変数に格納

    mysql> SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' ) ; で +------+ | rows | +------+ | 9 | +------+ と出すことができます。 この rows の数「9」を php の変数に入れたいのです。 <?php // DB接続省略 $sql = "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' )" ; $result = mysql_query($sql, $conn); var_dump($sql."<br />"); echo ($result."--result"."<br/>"); $rows= mysql_num_rows($result); echo ($rows."--rows"."<br/>"); ?> として、ブラウザで確認すると string(80) "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' ) " Resource id #3--result 1--rows となって、 $rows に値’9’が入りません。$rows にレコード数を取得させるには、どうすれば良いでしょうか?

    • ベストアンサー
    • PHP