• 締切済み
  • すぐに回答を!

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
  • 回答数4
  • ありがとう数0

みんなの回答

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

>書き直したソースには、utf8で記述してあると思いますが…。 書き直したソースにあるのは「DSNでのcharset指定」がutf8という部分だけです。MySQLサーバに「データをutf-8でください」と頼んでいるだけですね。headerでのcontent-typeの出力については何の(修正した)記述もありません。 MySQLからutf-8で受け取ったデータをそのまま出力していても、httpレスポンスでcharsetをSJISに指定していますからブラウザはShift_JISだと思って処理します。つまり確実に化けます。ブラウザが適用しているエンコードを確認してください。 いっそheader出力がない方が(ブラウザの自動判別にまかせた方が)化けない可能性が高いです。が、どうせやるなら <?php header("Content-Type:text/html;charset=utf-8"); ?> に書き直してください。

共感・感謝の気持ちを伝えよう!

質問者からの補足

またまた説明が不足していたとも思いますが、 php(html)ベースの文字コードはもちろんutf-8で保存してあります。 ブラウザの文字コードがutf-8のときは、一般のテキスト部分が正しく表示され、 データベースから読み取った部分が『????』になり、 エンコードを『Shift-JIS』にすると、一般のテキストが文字化けを起こし、 データベースの部分だけが正しくひょうじされまた。 その為、ブラウザでの認識する文字コード云々は、今回は関係ありません。 また、記述したソースは問題の部分のみを記述したものであり、phpのソース全体を 記載したわけではありません。 >>希望は、文字列は『utf-8』で表示させようとしています。 >であれば、どう考えても >><?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?> >これはマズイですよね。 この部分は、弐回目に記述したソースには含まれていないのですが、 単に弐回目のソースを見ていなかっただけでは? 大変申し訳ありませんが、論点がずれているようです。

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

>希望は、文字列は『utf-8』で表示させようとしています。 であれば、どう考えても ><?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?> これはマズイですよね。

共感・感謝の気持ちを伝えよう!

質問者からの補足

書き直したソースには、utf8で記述してあると思いますが…。

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

>日本語の文字列が >全て『?』で表示されてしまいます。 DSNでクライアント(phpスクリプト)の文字セットを指定していますか? http://php.net/manual/ja/ref.pdo-mysql.connection.php 提示されたソースであれば、下記のような接続になっているハズですが如何でしょうか $pdo = new PDO("mysql:host=localhost;dbname=sample;charset=sjis", "xxxx", "xxxx"); #もしこれで化けるようだったら、phpのバージョンを書いてください 可能であればShift_JISなど使わず、utf-8(DSNではcharset=utf8)。で書いた方がいいとは思いますが・・・

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答ありがとうございます。 説明不足で申し訳ありません。 希望は、文字列は『utf-8』で表示させようとしています。 my.iniの修正だとは思うのですが、古いバージョンのmysqlの設定しか やったことがないので、詳しくは解りません。 行ったことといえば、データベースの照合順序を『utf8_unicode_ci』に したことくらいです。 ちなみに、修正したソースコードは、 <?php $dsn = 'mysql:dbname=catsule;host=localhost;charset=utf8;'; $user = 'root'; $password = ''; try{ $dbh = new PDO($dsn, $user, $password); print('接続に成功しました。<br>'); // $dbh->query('SET NAMES sjis'); $sql = 'SELECT * FROM data'; foreach ($dbh->query($sql) as $row) { print($row['id']); print($row['name'].'<br>'); } }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } ?> で、PHPのVerは5.4.22です。 お手数をおかけしますが、よろしくお願いいたします。

  • 回答No.1
noname#244856
noname#244856

引数の順番はMysql関数とMysqli関数で真逆になっているものが多いので、マニュアルですべて確認してください。目次はオブジェクト指向型が見出しになっているので注意を。 Mysqli http://jp2.php.net/mysqli/ 但し、単に手続き型のMysqliに書き換えるよりはオブジェクト指向の方が推奨されるでしょう。(マニュアルもそちらが主体的になっていますし) さらに、オブジェクト指向で書くならばMysqliよりもっと扱いやすいPDOというものもあります。詳しくは下記にて。 PHPでデータベースに接続するときのまとめhttp://qiita.com/mpyw/items/b00b72c5c95aac573b71

共感・感謝の気持ちを伝えよう!

質問者からの補足

早速のご回答、ありがとうございます。 PDOを使用してみたところ、簡単に取得するところまでできました。 しかし、私の方の設定が間違っているのか、日本語の文字列が 全て『?』で表示されてしまいます。 これはMySQL側の設定だということは解るのですが、XAMPPが1.8になってから (説明し忘れましたが、XAMPP1.8.xxを使用しています)、my.iniの設定も 変わり、どのように設定するのかが解らなくなってしまいました。 この質問内で聞く内容とは違う竹、補足として付け加えましたが、 もし続けてお教えいただけるのならば幸いです。 よろしくお願いいたします。

関連するQ&A

  • MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします

    環境:Apache2&PHP5&MySQL5 MySQL5のデータを、SQL文を使いcsv形式でダウンロードさせると文字化けします。 -- <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $srv = "localhost"; // サーバー名 $id = "root"; // ユーザーID $passwd = "******"; // パスワード $dbn = "sample"; // データベース名 $sql = "SELECT * FROM result"; // SQL文 $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print(mb_convert_encoding($str,"SJIS","EUC-JP").","); } print("\n"); } mysql_close($db); ---ダウンロードしたCSVは半角英数文字はそのまま出ますが、 日本語(全角)が、?に化けます。(下記の参照してください) 24 2 1 444 4444 2008/7/3 15 ? 1E+18 ??? ????? ?????? 25 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? 26 2 1 444 kojiide 2008/7/3 30 ? 1E+18 ??? ????? ?????? --- print(mb_convert_encoding($str,"SJIS","EUC-JP").","); でSJISになっていると思うのですが、どなたかアドバイスいただけると幸いです。

    • ベストアンサー
    • PHP
  • php + mysql でフォーム作成時のエラー

    データベースから取り出したデータをラジオボタンで選択し、それをデータベース(別のテーブル)に追加させる機能を作りたいです。 非常に初歩的なことだとは思うのですがご教授ください。 MySQL 4.0.27 PHP 5.2.11 <FORM ACTION="cone3.php" METHOD="post"> <?php $srv = ""; // サーバー名 $id = ""; // ユーザーID $passwd = "; // パスワード $dbn = ""; // データベース名 $sql = "SELECT code, lname, lecturer, kind, gradetype FROM Lecture"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE><TR>"); print("<TR><th> </th><th>講義名</th><th>教員</th><th>科目区分</th><th>配当学年</th></tr>"); while($row = mysql_fetch_array($rs)) { print '<tr><td><input type="radio" name="regist" value="$row['code']"></td>'; print '<td>' . $row['lname'] . '</td>'; print '<td>' . $row['lecturer'] . '</td>'; print '<td>' . $row['kind'] . '</td>'; print '<td>' . $row['gradetype'] . '</td>'; print '</tr>'; print ("</TR>"); } print("</TABLE>"); print_r($_POST); echo "<br />\n"; mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> <input type="submit" name="submit" value="送信"> </form> 以上のようなソースでラジオボタンで配列の$row[code]の値を送りたいんですがうまくいきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • MYSQLで読替え(SELECT~CASE)をし、CSVを作成したい

    MYSQLで読替え(SELECT~CASE)をし、CSVを作成したい MYSQLは4シリーズを、PHPは5を使用しています。 データベースの値をCSV出力しようとしておりまして、 下記のようなソースを書いています。 現在このソースで作成されるCSVは 日付|行先/要件|交通機関|往/復|証票|金額 2010/4/5|test| 1 | 1 | 2 | 14480 と、言った感じのものなのですが 交通費(USAGE)や往復(ROUND)、証票(CERTIFICATE) は取得できる数値によって読み替えを行いたいのです。 SELECT~CASE WHEN~END 文で実現できると考え、 phpmyadminで色々ためしているのですが エラー内容は常に #1064 - You have an error in your SQL syntax; で、 ASで項目名を変えている場合、 CASE読み変えはできないのかな等と考えています。 CSVを 日付|行先/要件|交通機関|往/復|証票|金額 2010/4/5|test| 1.電車 | 1.片道 | 2.無し | 14480 と、表示させるにはどう読み替えを行えばよいのでしょうか? 単純にSQL分のミスなのか、そもそもできない事をやろうとしているのか、 いきずまっています。 ---ソースここから--- <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $csv_flg = 1; $doc_id = 1; //接続情報  $srv = "localhost";  $id = "aaa";  $passwd = "bbb";  $dbn = "ccc"; /* USAGE は0:未選択,1:電車,2:タクシー */ if($csv_flg == 1){ $sql = "SELECT `REC_DATE`as`日付`, `USAGE`as`行先/要件`, `LINE`as`交通機関`, `ROUND`as`往/復`, `CERTIFICATE`as`証票`, `COST`as`金額` FROM transportation WHERE SEISANSHO_ID = '".$doc_id."' ORDER BY LINE_NO "; $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","UTF8").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print(mb_convert_encoding($str,"SJIS","UTF8").","); } print("\n"); } mysql_close($db); } ?>

    • ベストアンサー
    • MySQL
  • PHPでCSVをダウンロード/アップロードしたい

    会社の方で必要に迫られ、以下のような処理を行おうとして行き詰まっております。 (一旦ローカル環境にてテストをおこなっております。過去履歴やGoogle等で検索しましたが解決できなかったので、こちらに質問しました。)    1.MySQLのデータをCSVでダウンロード  2.excel等の表計算ソフトで編集  3.編集したCSVをMySQLへアップロード   1で、カンマ/改行を一旦代替(例,を')にした(excel/テキストエディタ等での表示がおかしいため) 3で、代替したものを元に戻しアップロードさせる。   作成したPHPでは、ダウンロード/アップロード自体は問題ないのですが、 問題点1.アップロードの際、MySQLの日本語フィールドは「”」になる。 問題点2.上記3の方法で詰まっている。   環境 XAMPP Mac OS X版 0.7.4 PHP 5.2.6 MySQL 5.0.67 Apache 2.2.11   【ダウンロード用PHP】 <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $srv = "サーバー名"; $id = "ユーザーID"; $passwd = "パスワード"; // $dbn = "データベース名"; // $sql = "SELECT * FROM xxxx"; $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","UTF-8").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); $search = array("\r\n","\n","\r","<br />"); $str = str_replace($search,";",$str); $str = str_replace(",","-",$str); print(mb_convert_encoding($str,"SJIS","UTF-8").","); } print("\n"); } mysql_close($db); ?> 【アップロード用PHP】 <?php $file = $_FILES[userfile]['name'] ; //DB接続 $conn = mysql_connect($srv, $id, $passwd) or die("データベース接続エラー"); mysql_query("SET NAMES SJIS"); mysql_select_db($dbn) or die("データベース".$dbn."接続エラー"); $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE phplesson.xxxx FIELDS TERMINATED BY ',' IGNORE 1 LINES"; mysql_query($sql, $conn) or die(アップデート失敗); ?>   以上、お知恵を拝借できましたら幸いです。

    • ベストアンサー
    • PHP
  • PHPでのデータ表示画面⇒CSV出力について

    先日より質問に対しコメントありがとうございます。 教えていただいた内容と自分でやった結果3つのSQLでデータを出力し出力順を揃えた方法で表ができました。 これをCSV形式で出力したいのですがこのまま出力できるのでしょうか?それとも別途方法をとる必要があるのでしょうか。 自分の中で今ひとつまとまらないので改めて質問させていただきます。 ソースへの指摘併せコメントよろしくお願いします。 ※現ソース <HTML> <BODY> <?PHP //DB接続部省略 $sql="SELECT I.ITEM_ID,I.ITEM_NAME FROM ITEMS AS I,LIST AS L・・・(略)"; $sql2="SELECT A.SHOP_ID,A.SHOP_NAME,A.ITEM_NAME, IF(L.ITEM_ID=A.ITEM_ID,'○','') FROM・・・(略)"; $sql3="SELECT S.SHOP_ID,S.SHOP_NAME FROM SHOP AS S ・・・(略)"; $rs=mysql_query($sql,$db); $rs2=mysql_query($sql2,$db); $rs3=mysql_query($sql3,$db); $line=mysql_num_rows($rs); $line2=mysql_num_rows($rs2); $line3=mysql_num_rows($rs3); print("<TABLE border=1>"); print("<TR>"); print("<TD>店舗名</TD>"); for($i=0;$i<$line;$i++) { $row=mysql_fetch_row($rs); print("<TD>".$row[1]."</TD>"); } print("</TR>"); print("<TR>"); for($i=0;$i<$line3;$i++) { $row3=mysql_fetch_row($rs3); print("<TD>".$row3[2]."</TD>"); for($j=0;$j<$line;$j++) { $row2=mysql_fetch_row($rs2); if($row2[3] == "") { print("<TD width=25> </TD>"); } else { print("<TD width=25>".$row2[3]."</TD>"); } } print("</TR>"); } print("</TABLE>"); mysql_free_result($rs); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($db); ?> </BODY> </HTNL>

    • ベストアンサー
    • PHP
  • MySQL+PHPでリストから詳細表示

    MySQL+PHPで顧客情報のデータベースを作っているところで詰まってしまいました。下のようなテーブルがあります。 number name furi ・・・ ------------------------- 1 北  kita 2  南 minami 3    東 higashi 4    西 nisi このテーブルのリスト一部分を表示して 詳細ボタンを押すと顧客情報の詳細が表示 できるようにしたいのですが、どのように すればいいかまったくわかりません。 一覧表示      名前 フリガナ   詳細  北   kita 詳細  南   minami  詳細 西   nisi こんな感じで詳細を押すと、顧客情報の詳細が 表示されるようにしたいのですが。 一覧を表示させるPHPはこんなかんじで作りました。 //SQL文 tab1表から全行を取り出し、number列の昇順に整列する $sql = "select * from addrmain order by number"; //SQL文を実行する $rs = mysql_db_query($db,$sql); //列数を取得する $num = mysql_num_fields($rs); //HTML文を出力 テーブルの開始を指定 print("<table border=1>"); //test表の列数と同じ回数を繰り返す for ($i=0;$i<$num;$i++){ //HTML文を出力 列名を <td>で囲んで出力 print("<td>".mysql_field_name($rs,$i)."</td>"); } //test表の行数と同じ回数を繰り返す while($row=mysql_fetch_array($rs)){ //HTML文を出力 表の行の開始<tr> を出力 print("<tr>"); //test表の列数と同じ回数を繰り返す for($j=0;$j<$num;$j++){ //HTML文を出力 列の内容を <td>で囲んで出力 print("<td>".$row[$j]."</td>"); } //HTML文を出力 表の改行</tr> を出力 print("</tr>"); } //HTML文を出力 テーブルの終了を指定 print("</table>"); なにをどのようにしたら良いかお知恵をお貸しください。お願いします。

    • ベストアンサー
    • MySQL
  • MySQLからCSVファイルのダウンロード

    はじめまして。 MySQLのデータをCSVファイルに書き出しダウンロードする場合に、 文字コードをSJISに変換してダウンロードしたいのですが、下記のソースに何を付け加えればできますでしょうか? お手数ですが、何方かご教授よろしくお願いします。 //tab1表から全行を取り出す $sql = "select * from tab1"; if(!$rs = mysql_query($sql)) { print "error=".mysql_errno()."<br>"; exit; } $fields = mysql_num_fields($rs); $rows = mysql_num_rows($rs); //取り出した行数分繰り返す for($i=0;$i<$rows;$i++){ //列数分繰り返す for($j=0;$j < $fields;$j++){ //列の内容出力する print(mysql_result($rs,$i,$j)); //最終列でない場合は カンマ を出力する if ($j < $fields - 1) print(","); } print("\n"); }

    • ベストアンサー
    • PHP
  • PHP+MYSQLで3×5のテーブル表示について

    こんにちは。 PHP+MYSQLでページング処理で画像を出力の勉強をしています。 さっそく質問です。PHP+MYSQLを使って 元テーブルがID番号、名前、性別だとして、 1名分の表示は上記フィールドのデータを縦に3行作った後、 横の列に移るという作業をして、結果縦横に3×5並べる にはどう書けば良いいでしょうか? プログラムのイメージは以下になります。 めくっていく頁のはじめの行($i=$startline)から表示する時、 表示を1列×3行のまとまり□を縦横に3×5出力する場合、 mysqlに接続した後、 $rs = mysql_db_query($db,$sql); while($row=mysql_fetch_array($rs) ){ print("<table><tr>"); print("<td>"); print("<td>"); for($i=0;$i<4;$i++){ print("<tr>"); print("<td>"); print($row[$i]); print("</tr>"); print("</td>"); print("</td>"); } print("</td>"); print("</tr></table>"); こういう形の後、ページングの$pageのurlを作って、$_get[]に 飛ばすというイメージです。 よろしくお願いします。 以上

    • 締切済み
    • PHP
  • 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
  • DBから取得した内容を横表示

    質問します。 DBにID,NAME,IMGと言うカラム名があります。 例 ID NAME IMG 0001 PHP1 PHP1 0002 PHP2 PHP2 0003 PHP3 PHP3 データを取得し、ブラウザにて横に表示するように したいのですが、うまくいきません…。 ブラウザーイメージ 0001 0002 0003 PHP1 PHP2 PHP3 画像 画像 画像 以下がサンプルです。 <?php //DB接続 if((!$db = mysql_connect("","",""))){ die; } //DB選択 if((!mysql_select_db(""))){ die; } if(!mysql_query('set names sjis')){ echo "sjis 設定エラー"; die; } $SQL = "SELECT * FROM video_data"; if(!($rs = mysql_query($SQL))){ print mysql_error(); die; } ?> <table border="0"> <TR> <?php $count = 0;      while($item = mysql_fetch_array($rs)){ //ID表示 print "<TD>".$item['ID']."</TD>"; //名前表示 print "<TD>".$item['NAME']."</TD>"; //改行     if($count == 4){       print "</TR>";   $count = 0;     }     //IMG表示 print "<TD><img src='./test/".$item['ID'].".jpg'/></TD>"; $count++; } print "<TR>"; //コネクションクローズ mysql_close(); ?> </TABLE> どこを修正したらいいのかわかりません… 色々やっているんですが…。 わかる方が居たらヒントでもいいので 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP