• ベストアンサー

「至急」日本語がUPDATEできません。。

こんにちは 小生はMYSQL4.1.2を使っています。PHPで画面から日本語入力をゲットしDBに更新を行ったが、テーブル該当項目の値は空白です。DEBUGした結果、PHPはちゃんと画面から日本語文字をゲットしたが、mysql_queryでupdateしたら該当項目の値は空白となってしまいました。エラーも出でいません。 原因は何が考えられますでしょうか? ありがとうございます。

  • MySQL
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

MySQLサーバーに繋ぎにいったら、 SET NAMES sjis または SET CHARACTER SET sjis というSQL文を最初に実行してみてください。 これで「クライアント(今回の場合はPHPのスクリプトが)は文字コードをシフトJISで扱ってます」ということをサーバーに伝えることができます。 これにより、サーバー側での文字コードと違えば相互変換してくれます。 ※ちなみにEUCだったらujisです。

suzukika
質問者

お礼

できました。ありがとうございました。 勉強になりました^^

その他の回答 (2)

  • to-zoku
  • ベストアンサー率36% (16/44)
回答No.2

とりあえず、EUCでは大丈夫みたいだよ。 SJISでは、ダメって事はないですが、きちんとコード変換してないとダメっぽいですねー。 サーバがLinuxでEUCだとか。 SQL文の追加を、\"ないよう\" とするのはどうですか? 責任がないのは、無責任ではない。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

文字コードがSJIS。 とか。 PHPとMysqlで文字コードがあってない。とか。 SQL文が間違っているとか。 ソース表記してもらえばもう少し詳しいことが言えるかも知れません。

suzukika
質問者

補足

ご回答ありがとうございました。 文字コードがSJISではダメですか? PHPで作ったページはあいにくSJISですが、。。 とにかく変換してみます^^

関連するQ&A

  • phpからMySQLへ日本語insert

    phpプログラムからMySQLへ日本語の入力を行おうとしているのですが、 selectで閲覧してみても、文字化けどころか挿入すらされていませんでした。 コードは以下のような実にシンプルなものです <?php require_once'DB.php'; $username = "****"; $password = "*****"; $host = "localhost"; $database = "udb"; $db = DB::connect("mysql://$username:$password@$host/$database"); //DB接続 if (DB::isError( $db )) { die($db->getMessage()); } $sql = "INSERT INTO comments (lec_code, comment) VALUES (0000, 'ああああ')"; $result = mysql_query($sql); ?> 日本語でなく、英語でinsertした場合は問題なく挿入できました。 また、MySQLから直接SQL文での入力であれば日本語をinsertできたので、設定ミスが問題なのであればMySQLではなくphp側だと思われます。 ちなみに、MySQLの文字設定はsjis、phpの設定は以下のとおりです。 output_buffering Off default_charset "Shift_JIS" extension php_mbstring.dll mbstring.language Japanese mbstring.internal_encoding SJIS mbstring.http_input auto mbstring.http_output SJIS mbstring.encoding_translation On mbstring.detect_order auto mbstring.substitute_character none

    • ベストアンサー
    • PHP
  • データベースへの日本語入力

    PHPとMySqlを勉強し始めたものです。 超初心者ですが、よろしくお願いします。 @PAGES(http://atpages.jp/)というサイトを使っています。 ネットで見つけたサンプルプログラムを使って、データベース(MySql)へのデータの入力と読み出しをやってみたのですが、半角英数字なら、読み込みや書き出しはできるのですが、日本語の文字であれば、空白になってしまいます。 プログラムを調べてみると、PHPでのデータベースへの書き込みのときは、ちゃんと日本語の文字を書き出そうとしているようなのですが、「phpMyAdmin」というサイトで書き込まれた情報を見てみると、空白なので、データベース側がデータの受け取りを拒絶したようにも思われます。 サイトで検索して、HTMLの<HEAD></HEAD>のところに下記のような行を入れたり、 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 『mysql_query("SET NAMES 'utf8'"); 』という行をデータの書き込み行の前に入れたりしても、変わりませんでした。 どのようにすれば、日本語もデータベースで扱えるようになるのか教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLで日本語データを入力したいのですが。

    PHP5、MySQL5を使用しています。最近始めたばかりで参考書を購入して勉強しています。 購入した参考書には「PHPとMySQLの連携」という章があり読んでいくと、MySQL(コマンドライン)に日本語が表示されていました。 この本はMyAdminなどを使っていないので、PHPでフォームを作成してそれで日本語をMySQLに送信しているのだと思いやってみたのですが、データが入りません。英数字なら入るのですが、日本語になると入ってくれません。 設定が悪いのでしょうかそれとも私の書き方がいけないのでしょうか。 $ins = "INSERT INTO name VALUES('あじあ')"; $mq = mysql_query($ins); このように書いたのですができませんでした。すみませんが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • getがらphpに日本語を送ったとき化け文字に

    <?php ・・・・・・・・ $mousikomi_hi1 = $_GET["mousikomi_hi1"]; $name =$_GET["name"];// "田中"; $sql = "SELECT $mise.kokyaku_no FROM $mise WHERE name='$name' AND DATE_FORMAT(mousikomi_hi1,'%Y/%m/%d') ='$mousikomi_hi1'"; mysql_query("set names utf8"); $rows = mysql_query($sql, $sv) or die("mysql query Error"); $row = mysql_fetch_array($rows, MYSQL_ASSOC); ・・・・・・・・・ ?> var mousikomi_hi1 = $F("mousikomi_hi1"); var name = document.addE.name4.value; //alert(name); xhrObj.open("get", "add_meigara.php?hannbaitenn="+hannbaitenn+"&mousikomi_hi1="+mousikomi_hi1+"&name="+name); getがらphpに日本語を送ったとき $name =$_GET["name"] に化け文字?(□/□□)になり SQLの検索ができません 直接 $name = "田中";とすると 検索できます 初心者で、あまりわかりませんが、よろしくお願いします。

    • 締切済み
    • PHP
  • mysql内データを降順件数指定表示

    タイトル通り、mysql内のデータを降順で件数指定して表示しようとしていますが、 どうしてもうまくいきません。 var_dumpでチェックしても問題ないように思われるのですが、うまくいかないということで見落としているミスの箇所があると思われるのですが、つまづいてしまいます。 以下にコードを載せますので、どなたかアドバイスをいただけないでしょうか。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } //クエリ生成 $query = "SELECT * FROM shops ORDER BY id DESC limit 4"; $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>新着情報</title> </head> <body> <p>場所:<?php echo $row['area']; ?></p> <p>店名:<?php echo $row['name']; ?></p> </body> </html>

    • ベストアンサー
    • PHP
  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Windows→Linuxへの乗せ変え

    Windows2003+Mysql4.1+Php4+Apache2の環境を Linux+Mysql4.1+Php4+Apache2へ乗せ変えしようと思っています。 とりあえず、DBは、Windows2003に残し、 Linux+Php+Apacheを構築し、システムを動かしてみたのですが、 PHPに書かれている日本語は、正常に表示されるのですが、 DBから読み込んだ値のみが、文字化けを起こしてしまいます。 日本語には、EUC-JPをつかっています。 何が原因でこうなるのでしょうか? ご教授いただければありがたいです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【至急】MySQLのエラーを解消したいのですが?

    データを間違って消してしまい、サーバーにデータを バックアップ復活したのですが、以下の様なエラーが生じており、 困っております。 MySQLのエラーを解消したいのですが?、知識がなく、どうすればいいのでしょうか? ・1)Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL Server Host '0net' (1) in /ファイルパス/ファイル.php on line 7 ・2)Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /ファイルパス/ファイル.php on line 8 ・3)Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /ファイルパス/ファイル.php on line 8 ・4)Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /ファイルパス/index.php on line 5 ・5) Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /ファイルパス/index.php on line 5 ・6) Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /アフィルパス/index.php on line 6 ・7) Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /ファイルパス/index.php on line 6

  • ページング実装で2ページ目以降が全件表示してしまう

    検索システムの検索結果を分割表示する仕組みを作っているのですが、1ページ目は問題無く思った通りに表示されます。 しかし、2ページ目以降はすべて全件表示してしまいます。 「◯件中△件表示」というのは正常に動作しています。 いろいろ試行錯誤する中で、$queryの中身が2ページ目以降はwhere句等が外れてしまっているのが原因だということがわかりました。 じゃあ2ページ目以降にもきちんとそれらが反映されるように手直ししていこうということなのですが、どう対処していいかにつまづいています。 いろいろ情報を見ながら何度もチャレンジしているのですがうまくいきません。 2ページ目以降が全件表示ではなく検索結果として1ページ目の続きとして表示させるためにどうすればいいか、アドバイスをいただけないでしょうか。 よろしくお願い致します。 ※以下に今回の該当箇所のコードを記載します。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "DBユーザー名"; $pass = "DBパスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } define('NUM_SHOPS', 10); error_reporting(E_ALL & ~E_NOTICE); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } $offset = NUM_SHOPS * ($page - 1); //クエリ生成 $query = "SELECT * FROM テーブル名"; //検索条件抽出 $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } if (count($where) <> 0) { $query .= "limit " . $offset . ", " . NUM_SHOPS; } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); //検索結果件数カウント $query = "SELECT COUNT(id) FROM テーブル名"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC'; } $total = mysql_result(mysql_query($query), 0); $from = $offset + 1; $to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <!--検索結果表示画面始まり--> ~~~~~省略~~~~~ <!--検索結果表示画面終わり--> <!--以下、ページリンク--> <p> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page - 1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= ceil($total / NUM_SHOPS); $i++) : ?> <?php if ($page == $i) : ?> <strong><?php echo $i; ?></strong> <?php else : ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < ceil($total / NUM_SHOPS)) : ?> <a href="?page=<?php echo $page + 1; ?>">次</a> <?php endif; ?> </p> </body> </html>

    • 締切済み
    • PHP
  • 検索結果の分割表示時のSQLエラー

    PHP, MySQLで検索システムを作り、検索結果の分割表示をしようとしています。 その際、SQL文にエラーが生じるのですが、原因が調べてみてもわかりません。 検索条件のSQL文内のNUM_SHOPSという部分を数値に変えると1ページ目はきちんと分割表示されますが2ページ目以降が全件表示されてしまいます。 そして、NUM_SHOPSの部分をそのままにすると、SQLがエラーを起こします。var_dumpで$queryを確認すると、SQL文が二重に入ってしまっているのですが、どうしてこのような現象が起きるのかがいまいちわかりません。 アドバイス、ご指摘等いただけないでしょうか。 よろしくお願い致します。 以下に該当箇所のコードを記載します。 【result.php】 <?php require_once('config.php'); require_once('functions.php'); connectDb(); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } $offset = NUM_SHOPS * ($page - 1); //クエリ生成 $query = "SELECT * FROM テーブル名"; //検索条件抽出 $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } if (count($where) <> 0) { $query .= "limit " . $offset . ", NUM_SHOPS" ; } var_dump($query); //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); //検索結果件数カウント $query = "SELECT COUNT(id) FROM テーブル名"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC'; } $total = mysql_result(mysql_query($query), 0); $from = $offset + 1; $to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) : $total; ?> 【config.php】 <?php define('DB_HOST', '*************'); define('DB_USER', '*************'); define('DB_PASSWORD', '*************'); define('DB_NAME', '*************'); //ページごとのショップ数 define('NUM_SHOPS', 10); //エラー表示 error_reporting(E_ALL & ~E_NOTICE); 【functions.php】 <?php function connectDb() { mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die("can not connect to DB:".mysql_error()); mysql_select_db(DB_NAME) or die("can not select DB: ".mysql_error()); } function h($s) { return htmlspecialchars($s); }

    • ベストアンサー
    • PHP