mysqliでレコードの数を取得する方法は?

このQ&Aのポイント
  • PHPのバージョンを上げたことで、mysqlからmysqliへの書き方の変更が推奨されたため、レコード数を取得する方法を教えてください。
  • ネットで調べても分かりませんでしたので、質問させていただきます。
  • $mysqliオブジェクトを使用して、SELECT文を実行してレコード数を取得する方法を教えてください。
回答を見る
  • ベストアンサー

mysqliでレコードの数を取得

オブジェクト指向で 下記のコードでレコード数を取得したいのですが、どうすればいいでしょうか? PHPのバージョンを上げて見たところ、 mysql○○と言う書き方から、 mysqli○○と言う書き方が推奨されたのを知り、 コードを書き直しています。 ネットで調べてみても分かりませんでしたので今回質問します。 $mysqli = new mysqli("localhost", "000", "000", "000"); $mysqli->set_charset('utf8'); if ($result = $mysqli->query("SELECT count(*) as max FROM like '%%'")) { }

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

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

>mysqli○○と言う書き方が推奨されたのを知り、 >コードを書き直しています。 元の(MySQL関数の)ソースではどうなっていましたか?おそらくはmysql_fetch_arrayやmysql_fetch_assocでfetchして、その結果を使っていたと思います。それをそのままmysqliに書き直すだけでいいんですが・・・ $row = $result->fetch_array(); とすれば $row['max']に得られますよね? RTFM. http://php.net/manual/ja/mysqli-result.fetch-array.php http://php.net/manual/ja/mysqli-result.fetch-assoc.php

その他の回答 (2)

noname#244856
noname#244856
回答No.2

mysqliでもいいですけど、個人的にチューニングがそこまで必要ないならばPDOをオススメします。 あらゆるエラー時に例外を投げてくれるのでとってもコーディングがしやすいからです。 (というかmysqli結構ややこしくて書きにくい) try { // 接続 $pdo = new PDO('mysql:dbname=testdb;host=localhost;charset=utf8'); // SQLエラー時にも例外をスローさせる $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SQL送信 $stmt = $pdo->query('SELECT COUNT(id) FROM test_table'); // 結果を取得 $count = (int)$stmt->fetchColumn(); var_dump($count); } catch (PDOException $e) { // エラーが起きた場合はここにジャンプする echo 'エラー: ' . $e->getMessage(); }

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

SELECT count(*) as max FROM テーブル名   ですよ?likeは不要です。

IrohaKujoh
質問者

補足

ソースコードの別の場所書いてしまいました。 正しくは SELECT count(*) as max FROM song

関連するQ&A

  • mysqliについて

    PHP初心者です PHP 5.2.5 MySQL 5.1.22 レンタルサーバーのphpのバージョンが php5.2.5ではpdoがバグで使えないらしいのでmysqliを使おうとしています。PHP 5.2.5でもmysqliはバグありますか? mysqliでMYSQLに接続するにはどうすればいいのでしょうか? いままではこんな感じでしたがmysqliにするとどんなコードになるのでしょうか? $link=mysql_connect('localhost', 'user', 'pass')or die(mysql_error()); mysql_select_db(user'); mysql_query('SET NAMES UTF8'); $start=1; $hyouji=10; $recordSet = mysql_query(sprintf('SELECT * FROM hoge2 ORDER BY id LIMIT %d, %d' , ',$start,$hyouji)); <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print($table['id']); ?></td> <td><?php print($table['name']); ?></td> </tr> <?php } ?>

    • ベストアンサー
    • PHP
  • connectを使ったSQL実行でエラー

    以下のphpでsql文を実行したのですが、エラーになってしまいます。 sql文が間違っているのでしょうか?phpmyadminで作成したsqlを貼り付けたのですが・・・ どなたか回答お願いします。 header("Content-type: text/html; charset=shift-jis"); #mysql_connectを使う #mysqliの定義 $mysqli = new mysqli('localhost', 'root', "", "******"); $link = mysql_connect('localhost', 'root', "", "*********"); if (!$link) { die("1:接続失敗です。".mysql_error()); }else{ print("1:接続成功!<BR>"); } // 文字化け防止 /* 文字セットを utf8 に変更します */ if (!$mysqli->set_charset("utf8")) { printf("2:文字コードのセットに失敗しました。: %s\n", $mysqli->error); } else { printf("2:文字コードセット-> %s\n", $mysqli->character_set_name()); } printf("<BR>"); $query = file_get_contents("./sql/create.sql"); printf("3:クエリ->%s",$query);#ちゃんと読み込まれているかクエリ確認 $stmt = $link->prepare($query); $stmt->execute(); // 変数のバインド $stmt->bind_result($name,$email); // 表示 while ($stmt->fetch()) { echo $name; echo $email; } //切断 $mysqli->close(); ------------------------------------------------- :実行結果 1:接続成功! 2:文字コードセット-> utf8 3:クエリ->SELECT * FROM test_table WHERE 1 Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdoc\saaaaa\aaaaa.html on line 41

    • 締切済み
    • PHP
  • Mysqliに関して

    すいません、分かる方いましたら宜しくお願いします。 php ver 5.16 Mysql ver 5.0.95 今回Mysql⇒Mysqliに接続方法を変える事になりまして、 今勉強しながら修正しています。 1個問題があり、不明点が御座います。 ファイルをDBに取り込むLOAD DATA LOCAL INFILEコマンドを使用していたのですが、 Mysqliを使用したら下記エラーになり使用できなくなりました。 This command is not supported in the prepared statement protocol yet prepared コマンドが使用できないと見えるのですが、 MysqliはOAD DATA LOCAL INFILEは使用できないものでしょうか?? プログラムは簡易ですがこんな感じです。 $mysqli = new mysqli($sv, $user, $pass, $dbname); //オートコミットを停止 $mysqli ->autocommit(FALSE); $stmt = $mysqli->prepare("SET NAMES utf8"); $stmt->execute(); $sql="LOAD DATA LOCAL INFILE '"・・・ //ここでエラー if (($stmt = $mysqli->prepare($sql)) === false) {   $result = false; die($mysqli->connect_error); $mysqli->close(); } $stmt->execute() or exit("bind errorn"); アドバイス頂けると助かります。 宜しくお願いします。

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

    古いサーバーから新しいサーバーに入れ替え、 PHPが5.1から5.6に変わったため、PHPのファイルを修正しています。 だいたい修正ができたのですが、どうしても「mysql_insert_id」が修正できません。 修正したソースは以下になります。 ******************************** $sql = "INSERT INTO img_k (img_name,img_caption,up_datetime) VALUES('".$in_img."','".$in_img_text."',now())"; mysqli_query(connect(), $sql) or die(mysql_error()."<br>$sql"); $id = mysqli_insert_id(connect()); ********************************* $idにINSERTした最新のIDを取得したいのですが、結果は「0」になります。 IDはmysqlでauto_incrementに設定してます。 connect()は別ファイルでデータベースの接続してます。 これでIDが取得できず先に進めない状態です。 あと「オブジェクト指向型」ではなく「手続き型」でお願いします。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • mysqlからmysqliへの変更点

    お世話になります。 PHPでmysqlのデータをhtmlで表示するソースを組んでいます。 初心者なもので、サンプルを見ながら組んでいるのですが、 そのサンプルがmysql_queryなどを使っていました。 しかし、今は推奨されず、mysqli_queryなどを使うとか。 そこで、単純にiを付け加えただけなのですが、そう簡単に 行きませんでした。 どの部分をどのように修正すればよいのかを教えてください。 ------------------------------------------------- <?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $srv = "localhost"; // サーバー名 $id = "xxxxx"; // ユーザーID $passwd = "xxxxx"; // パスワード $dbn = "sample"; // データベース名 $sql = "SELECT * FROM sample1"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); $num = mysql_num_fields($rs); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE border='1'><TR>"); for($i=0; $i<$num; $i++) { print("<TH>".mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP")."</TH>"); } print("</TR>"); while($row = mysql_fetch_array($rs)) { print("<TR>"); for($j=0; $j<$num; $j++) { print("<TD>".mb_convert_encoding($row[$j],"SJIS","EUC-JP")."</TD>"); } print("</TR>"); } print("</TABLE>"); mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> </BODY> </HTML> ---------------------------------------------- 他サイト様からの引用ですが、何卒よろしくお願いいたします。

    • 締切済み
    • PHP
  • MySQLのテーブルのコラム名の取得方法

    MySQLのテーブルを一つのオブジェクトと考えるようなクラスを作ろうとしています。 このクラスの中で、テーブルの各コラム(またはフィールド名)を要素にした配列を作りたいのですが、やり方がわかりません。 自分がある程度調べてみたところでは、MySQLシェルの中では、次のように入力すると添付した画面のようにコラム名の一覧が表示がされるのですが これらのコラム名をPHPスクリプト内にある配列に格納出来ません。 mysql> SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="transaction"; まだ作成の途中ですが、自分のスクリプトは以下に掲載したようなものです // columnList initialize というブロックが該当部分です。ほかの部分はとりあえず働いてます。 どなたかお知恵を貸していただけないでしょうか。お願いいたします。 <?php class Table{ private $DBname; private $tableName; private $columnList=array(); private $dataArray=array(array()); private $totalRecords; //=================================================== public function __construct($database, $tablename) //=================================================== { $this->DBname=$database; $this->tableName=$tablename; $cxn=mysqli_connect("localhost","root","rsi2018","$database") or die("cannot connect to database"); // $columnList initialize $query="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\"$tablename\""; $result=mysqli_query($cxn, $query) or die("query failed :1"); $row=mysqli_fetch_array($result); foreach($row as $col){ $this->columnList[]=$col; } // $totalRecords initialize $query="select count(*) as count from $tablename"; $result=mysqli_query($cxn, $query) or die("query failed :3"); $row=mysqli_fetch_array($result); $this->totalRecords=$row["count"]; // $dataArray initialize for($i=0; $i < $this->totalRecords; $i++){ $query="select * from $tablename where id=($i+1)"; $result=mysqli_query($cxn, $query) or die("query failed :2"); $this->dataArray[$i]=mysqli_fetch_assoc($result); } }// end constructor //=================================================== public function showPart($id) //=================================================== { $data=$this->dataArray[$id - 1]; /* foreach($data as $key=>$value){ echo "$key = $value</br>"; } */ echo "ID: ".$data['id']."</br>"; echo "partNumber: ".$data['partNumber']."</br>"; echo "partName: ".$data['partName']."</br>"; echo "simpleName: ".$data['simpleName']."</br>"; echo "stock: ".$data['stock']."</br>"; echo "location: ".$data['location']."</br>"; }// end function //=================================================== public function getTotalRecords() //=================================================== { return $this->totalRecords; }// end function //=================================================== public function showColumnList() //=================================================== { foreach($this->columnList as $field){ echo "$field "; } echo "</br>"; }// end function }// end class ?>

    • ベストアンサー
    • PHP
  • DBから取得した値を加工して別のDBへ挿入したい

    MySQLから取得した値を加工して、別のMySQLへ挿入したいのですが、 どうすればよいでしょうか? 例えば、リンク先の$row["Name"]に「さん」を付与して、別のDBへ挿入したい場合 ▽PHP: mysqli_result::fetch_assoc - Manual   http://www.php.net/manual/ja/mysqli-result.fetch-assoc.php 例1 オブジェクト指向型を参考に、連想配列を取得するところまでは出来たのですが、 この後、どうすればよいでしょうか? ■分からないこと1 ・連想配列で取得したデータを、$mysqli->close();した後でも利用するにはどうすれば良いでしょうか? whileの中で、 $data["Name"]=$row["Name"]; $data["CountryCode"])=$row["CountryCode"]); とやると1件しか取得できません。 whileの中で、 $data["Name"].=$row["Name"]; $data["CountryCode"]).=$row["CountryCode"]); とやると、ちょっとイメージと異なる配列になります。 ■分からないこと2 $mysqli->close();した後、$newmysqli = = new mysqli("localhost", "my_user", "my_password", "world");を書いて、もう一度同じようなことをやる感じなのでしょうか? 一回、閉じてから、新しいDBへ接続する流れなのでしょうか?

    • ベストアンサー
    • PHP
  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mysqli_stmtエラーの修正方法がわからない

    以下のエラーがわかりません。 Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\xampp\htdocs\job_site4\search_criteria.php on line 62 Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\job_site4\search_criteria.php on line 68 Warning: printf(): Too few arguments in C:\xampp\htdocs\job_site4\search_criteria.php on line 73 というエラーになりました。 以下ソースです。 /* 変数定義関連 */ /* mysqliの定義 */ global $mysqli; $mysqli = new mysqli('localhost', 'root', "", "db"); //$link = mysqli_connect('localhost', 'root', "", "db"); /* 接続状況をチェックします */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } print("<BR>"); /* 現在のデフォルトデータベース名を返します */ if ($result = $mysqli->query("SELECT DATABASE()")) { $row = $result->fetch_row(); printf("Default database is %s.\n", $row[0]); $result->close(); } print("<BR>"); /* データベースを a_db に変更します */ $mysqli->select_db("a_db"); /* 現在のデフォルトデータベース名を返します */ if ($result = $mysqli->query("SELECT DATABASE()")) { $row = $result->fetch_row(); printf("Default database is %s.\n", $row[0]); $result->close(); } // データベースのdump echo "<pre>";var_dump($mysqli);echo "</pre>"; /* プリペアドステートメントを作成します */ $sql = " SELECT * FROM `test_table` WHERE 1 "; // バインドデータ設定 $key = 1; if($stmt = $mysqli->prepare($sql)) { /* マーカにパラメータをバインドします */ $stmt->bind_param("i",$key); // バインドする変数に設定して送る /* クエリを実行します */ $stmt->execute(); /* 結果変数をバインドします */ $stmt->bind_result($col1,$col2); // バインドする変数分設定 /* 値を取得します */ $stmt->fetch(); printf("%s : %s\n", $col1.$col2); /* ステートメントを閉じます */ $stmt->close(); } // 切断 $mysqli->close(); よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう