• ベストアンサー

【PHP+MySQL】質問二点/日本語の問題/“!”判定の意味

よろしくお願い致します。 apache2.2+PHP5+MySQL5で勉強中です。 ■日本語の問題について MySQLもPHP(HTML)も全てSJISで取り扱いたいと思っております。 自宅PCと学校PC共に同じ様にインストール及び設定したと思うのですが (違う所といえばOSがXPhome(自宅)とXPpro(学校)くらいでしょうか) 自宅PCではPHPでDB接続して、mysql_query("SET NAMES sjis"); の一文を入れなければブラウザで日本語出力ができません。 学校PCではこの一文なしに日本語が表示されるのですが…。 できればSETSQLなしにできればと思っているのですが、 設定ファイル(ini)か何かの問題でしょうか。 ■“!”判定の意味について if(!$atai)で判定すると 0 もNULLと同じ様にかかってくるのですが。 この!はどういう意味の判定なのでしょうか。 またNULLだけをはじきたい場合はどのように書くのがよろしいでしょうか。 ご存知の方いらっしゃいましたらご教示願います。 よろしくお願い致します。

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

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 > MySQLもPHP(HTML)も全てSJISで取り扱いたいと思っております。 可能な限り全力でお避けになることをお勧めいたします。面倒なトラブルが続きますので。 文字コードは、EUCまたはUTF-8が無難です。 ! の意味については#1さんの回答をご覧ください。 > NULLだけをはじきたい場合 は、is_null ( http://jp.php.net/manual/ja/function.is-null.php ) という関数を用いるのが適切かと思います。 以上、簡単ではございますが。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

#補足程度に。 自宅と学校のMySQLは同じバージョンですか? WindowsならSJISにしたいとこですが、私も出来る限り止めた方がいいかと。 if(!$atai)は 0、''、null にヒットします。 関数的にはempty()が近いでしょうか。 if($atai === null) でも判別可能です。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

・!について not、真と偽を逆にします。 「if(!($a == $b))」は「if($a != $b)」と同じです。 「if(!($a != $b))」は「if($a == $b)」と同じです。 「if(!True)」は「if(False)」と同じです。 「if(!False)」は「if(True)」と同じです。

関連するQ&A

  • PHP でMysqlを使用して日本語を登録する。

    すいません、教えて下さい。現在、PHPとMYSQLを連携させてデーターベースを構築中なのですが、日本語が登録できません。mysqlモニタにてinsert 文で登録すると日本語が登録できるのですが、phpを経由すると登録できないのです。phpから、既存のデータベースを呼び出すと日本語のところがすべて文字化けしてしまいます。ちなみにmysqlのmy.iniの設定はsjisにしてあります。ujisにするとmysqlモニタからでも日本語が登録できなくなります。どこの設定がいけないのでしょうか?ちなみにWindows Vista php5.1 mysql 5.1 です。

    • ベストアンサー
    • PHP
  • 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のデータを読み込んだ時

    PHPでMYSQLのデータを読み込んで出力した時、日本語の部分だけ、表示されません。 my.iniには、いろいろ調べて、下のように書いてみました。ちなみに、sjisと書いてあるところは、ujisと書き換えたりもしました。 バージョンは、アパッチが2.0.53、PHPが5.0.4、MYSQLは4.0.20dです。 日本語の部分以外は、ちゃんと表示されているので、文字の設定が間違っているのだと思うのですが、 どなたか、分かる方教えてください。 [WinMySQLAdmin] Server=C:/mysql/bin/mysqld-nt.exe [mysqld] default-character-set=sjis language=C:/mysql/share/japanese [mysql] default-character-set=sjis [mysql-dump] default-character-set=sjis

  • PHP+MySQLの文字化けで悩んでいます

    お世話になります。 Windows Server2003で、XAMPPでPHP+MySQLを利用しようとしていますが 文字化けが解消されず困っています。どなたか、お助けいただけないでしょうか。 他では成功していたSJISを使おうと思っていますがうまくいきません。 my.cnfでの[mysqld]や[mysql]などの設定、およびphp.iniのmbstringなどの設定は、 今まで成功していたWindowsやLinuxと同様に行いました。 PHPによる単純な日本語表示もMySQLモニタ上の日本語は問題ありません。 しかし、MySQLからの結果セットを受け取ると文字化けしてしまいます。 たとえば、 $re=mysql_query("SELECT * FROM tb"); while($kekka=mysql_fetch_array($re)){ print $kekka[0]; } などを実行すると「:?w?Z?カ??:」などの表示になってしまいます。 また、PHPからMySQLでINSERTすると、MySQLでも文字化けしてしまいます。 MySQLモニタで「SHOW VARIABLES LIKE 'char%';」を実行すると次のように表示されます。 character_set_client | sjis character_set_connection | sjis character_set_database | sjis character_set_filesystem | binary character_set_results | sjis character_set_server | sjis character_set_system | utf8 知識がなく、悩んでおります。 まことに申し訳ありませんが、どなたかお助けいただけないでしょうか。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

    こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。 現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。 現状の日本語に関する設定は下記のようになっております。 ▼MySQL(my.cnf) バージョン:4.1.20 [mysqld] default-character-set=sjis init_connect="SET NAMES sjis" [mysql.server] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ▼PHP(php.ini) バージョン:4.3.9 mbstring.internal_encoding = SJIS mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto PHP内でMySQLと接続した直後に次のようにSJISを指定しています。 $sql="SET NAMES sjis"; mysql_query($sql); ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。 上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか? 1.PHPファイルをEUCコードに変換。 2.php.iniのSJISの部分をEUCに変換。 3.MySQLの設定ファイルのsjisの部分をujisに変換。 4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。 特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。 もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

    • ベストアンサー
    • PHP
  • PHPからmysqlへのデータの追加について

    いつもお世話になります。 昨日自宅のパソコンでPHPからmysqlへINSERT INTO でデータの追加が出来たのですが今日は会社のパソコンでテストをしたら クエリの送信に失敗しましたのエラーが出ました。いろいろ調べたら日本語入力するとエラーになります。半角英数だとうまく送信できました。 原因はおそらく文字コードの問題と思うのですがやはり show variables like 'character%'; でコマンドブロンブスに入力したら SET character_set_client = Utf8; になっていました。 この前質問したときに set names cp932; にすれば直ります。とのことで set names cp932;にしたのですが SET character_set_client = cp932; になったけど やはりPHPからmysqlにデータを送ると クエリの送信に失敗しました。 になります。おまけにコマンドブロンブスを停止して再起動するとまたもとの設定になります。 my.iniの設定も default-character-set=sjis にしています。 家のパソコンではうまく送信できたのでプログラムには問題ないと思います。 アドバイスお願いします。

    • ベストアンサー
    • MySQL
  • MySQLで日本語を出力すると文字化け(?)します。

    初めまして、MySQLの日本語の取り扱いについて悩んでいます。 この手の質問の過去ログをいろいろ漁ってみて、試してみたのですが、 やり方が悪いのか解決には至りませんでしたので質問させていただきます。 MySQLのバージョンは5.0で、phpMyAdminは2.9です。また、PHPのバージョンは5.1です。 OSはWindwos XPです。 status等で文字コードを確認したところ、以下のようでした。 Server characterset : sjis Db characterset : sjis Client characterset : sjis Conn.characterset : sjis また、phpMyAdminの「MySQLの文字セット」にはUTF-8 Unicode (utf8) とあります(この時点で十分謎です;;)。 このような環境で、以下のようなテーブルを作成し、ブラウザに「日本語。」と出力してみたところ、????と出ました。 どなたかのご教授を得られれば幸いです。 よろしくお願いします。

  • PHP日本語対策

    PHP5とpostgreSQLで作成しているWEB登録システムを設計し、開発者に開発してもらっています。 英語のページなので、日本語が入力されるとエラーにしたいと思っております。 しかし、開発者がいうには、PHPでいかなる日本語をはじくチェックをかけても、通りぬけてしまうようです。しかも、こちらで用意しているpostgreSQL環境では、日本語を登録するときにエラーになってしまうとのことです。PHPで文字コードをsjisにしていることが原因といわれてしまいました。 質問は、 PHPでは日本語が入力できないようにすることは不可能なのでしょうか。 また、PHPのdefault charsetをsjisに指定するのは、英語のページを作成するのに不適切なのでしょうか。

    • ベストアンサー
    • PHP
  • phpからMySQLへの日本語文字化けについて

    phpからMySQLへの日本語文字化けについて こんにちは。お分かりの方は教えてください。 現在、「ハッスルサーバー」を利用しwebのphpからMySQLサーバーへの 情報登録画面を作成しています。 登録内容で数値やメールアドレスなどの「1バイト文字」ですと 問題ないのですが、日本語の「2バイト文字」ですと文字化けが 発生してしまいます。 phpやMySQLに知識が無いため色々と調べて試したのですが 正しく登録できませんでした。 試した結果とサーバー/DBの状況は以下の通りです。 ※サーバー/DB ・バージョン:5.0.90-log ・文字セット:UTF-8 Unicode (utf8) ・接続照合順序:utf8_general_ci ・種別:MyISAM ・Variable_name:Value ・character_set_client:utf8 ・character_set_connection:utf8 ・character_set_database:utf8 ・character_set_filesystem:binary ・character_set_results:utf8 ・character_set_server:utf8 ・character_set_system:utf8 ・character_sets_dir:/usr/local/share/mysql/charsets/ ※phpファイルにて試した設定 //接続 $objCon = mysql_connect(C_SERVER, C_USER, C_PASSWORD); //文字コード // mysql_query("SET NAMES SJIS"); ←文字コードを左の2パターンで // mysql_query("SET NAMES UTF8"); ←どちらかに切り替えて実行しました。 //データベース $objSecDB = mysql_select_db(C_DB_NAME); //**********SQL(Insert)**********// $strSql = ""; $strSql = $strSql . "Insert Into XXXXX "; $strSql = $strSql . "("; $strSql = $strSql . "KeyNo,"; $strSql = $strSql . "E_Mail,"; $strSql = $strSql . "Title"; $strSql = $strSql . ") "; $strSql = $strSql . "Values "; $strSql = $strSql . "("; $strSql = $strSql . " " . mysql_real_escape_string($intKeyNo) . ", "; //KeyNo $strSql = $strSql . " " . mysql_real_escape_string($strEmail) . ", "; //E_Mail $strSql = $strSql . "'" . mysql_real_escape_string($strTitle) . "' "; //Title $strSql = $strSql . ")"; //SQL発行 $blnRet = mysql_query($strSql); ・上記のソース内に記しましたが文字コードを2パターン切り替えて  実行しましたが文字化けや空文字が登録されました。 どなたか対処方法をお分かりの方はお教えください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL 4.1.10a で日本語入力できない

    以下の環境でPHPとMySQLを使おうと思っているのですが、MySQLのコンソール画面で日本語を入力しようとしても、日本語が表示もされずに消えてしまいます。 mysql> select * from table where data='日本語 ↑ここでエンターを押すと mysql> select * from table where data=' ↑こうなります 過去にも似たような事例は見かけるのですが、参考にして対処しても改善されません。どうしたらよいのでしょうか、すみませんが教えてください。 <以下は環境など> ・FedoraCore2 ・Apache2 ・PHP5.0.4 ・MySQL4.1.10a ■設定ファイル /etc/my.cnf [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis [mysql] default-character-set = ujis ■起動方法 /usr/local/mysql/bin/mysqld_safe --default-character-set=ujis & ■SHOW CHARACTER SET 以下のように表示されすので、文字コードは入っているように思えるのですが、 どうやって使用すればよいのでしょうか。 mysql> SHOW CHARACTER SET …略… | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | …略… ■Linuxの日本語環境 /etc/sysconfig/i18n LANG="ja_JP.eucJP" SUPPORTED="ja_jp.eucJP:ja_JP:ja"

専門家に質問してみよう