• 締切済み

レンタルサーバでPHP(pico)からMySQLに接続したい

初めて質問させていただきます。 phpもmySQLも初心者なのでもしおかしいところや足りないところがありましたらご指摘ください。 レンタルサーバ(お名前.com)にて、xoops cubeをインストール。 picoモジュールを追加。 phpmyadminモジュールを追加し、自前テーブルを作成。 picoのコンテンツ編集により、phpプログラムを記述し、自前テーブルに接続。 やっている内容は、 リストボックスで選択された単語からDBを検索するフォームをPOSTで送信 次ページにて一覧を表示する です。 自分記述したphpプログラムでDBConnectしています。 問題箇所は、 検索結果は表示され、想定した通りのhtmlが表示されるのですが、ページの一番下に以下のコメントが表示されてしまいます。 Warning [PHP]: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in file xoops_trust_path/modules/pico/main/index.php line 83 Warning [PHP]: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in file xoops_trust_path/modules/pico/main/index.php line 83 色々調べてみたところ、socketの相違だと思い、以下を調べました。 phpinfo()にて表示されたsocketは「/tmp/mysql.sock」 phpmyadminから見た変数socketは「/tmp/mysql.sock」 上記のように、相違はない模様。 DBの内容も取って来れてるので問題はないのですが、画面に常にエラー表示がされてしまうのはとても気になります。 原因に思い当たるふしがあればご教授願えませんでしょうか。 ちなみにレンタルサーバなのでphp.iniは変更出来ません。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

mysql_real_escape_string関数は、mysqlへの接続が確立した後で無いとwarningが出ます。 つまり、 mysql_connect関数の前や、mysql_close関数の後など、DB接続をきっている場所で使用するとwarningを吐きます。 なので、 DB接続 ↓ POSTされたデータなどをmysql_real_escape_stringなどでエスケープ ↓ SQL発行 ↓ DB接続を閉じる という流れになっていない箇所が無いか確認してください。

ringoxyz
質問者

お礼

回答ありがとうございます。 私が書いたものに関してはその順番になっているのですが、もしかしたらpicoと絡むとそうなっているのかもしれません。 しかし、私にはそこまで確認する技術がなく・・・(泣)。 いったん、picoではなく単純にモジュール作成からやってみて勉強しなおします。 また何かありましたらご教授ください。 ほんとうにありがとうございました!

関連するQ&A

  • PHPのMySQL接続について

    Mysqlの超初心者なので質問に不備などがございましたらすみません。 次のサイト(http://blog.nextbird.com/?p=23)に掲載している通りに会員システム構築を行っております。 レンタルサーバー(Cside:mySQl使用可能)のphpmyadminでデータベースを作成しました。データベースサーバー名やパスワードなどもiniファイルに記入して接続用のファイルでincludeしています。 すべてアップロードし、試しに自分でフォーム(名前やEmailアドレスなど)に記入したところ、『Can't connect to local MySQL server through socket '/tmp/mysql.sock' 』というエラーが出ます。 『local MySQL server』ということはローカルのMysqlに関係しているようなのですが、レンタルサーバーですべてを行っているのにローカルでMySQLをインストールして設定することなどが必要なのでしょうか?Csideのphpmyadminで『phpMyAdmin 2.6.4-pl3 へようこそ』の下に 『MySQL 4.0.24 は localhost 上 *******@localhost として実行しています。』と書いてあるのも気になります。 php自体は経験有りなのですが、MySQLの接続で困っている状況です。とにかく、、『Can't connect to local MySQL server through socket '/tmp/mysql.sock' 』だけは回避したいのですが、どなたかわかりやすくお教えして頂けませんでしょうか? 分かりづらい質問で誠に申し訳ございません。

  • MySQL+PHP 接続エラーについて

    はじめて質問させて頂きます。 MySQL、PHPともに初心者です。 MAMPを使用しています。 ローカルではほぼ問題無く動作していたphpファイルをウェブ上にアップロードしたところ、以下のようなエラーが出てしまいました。 Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in~ ネットやこちらの過去ログで調べたところMAMP使用下ではよくあるエラーらしく解決法も載っていたのですが、どれを試してもなぜかエラーが消えてくれません。 ソケットもMySQLサーバー側とクライアント側で同じもの(/Applications/MAMP/tmp/mysql/mysql.sock)を参照していると思うのですが・・・ php.iniの中でも、 mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock と指定されてあります。 何か他に原因があるのでしょうか。 ド素人のため質問がすでにおかしいかもしれませんが、お知恵をお貸しください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • ソケットエラーについて(PHP+MYSQL)

    過去ログもたくさんでていたのですが、解決しないので質問します。 PHPとMYSQLを連動させて使用したいのですが、わからないなりにサーバーの設定しています。 Fedora Core3 PHP Version : 4.3.11 Apache Version : 2.0.53 MYSQL 5.0.24a で設定しています。 PHP単体では動いています。 MYSQLもターミナル上では動いています。 PHPからの動かすと DB Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13) と出たので、 mysqldをもう一度起動してみたり php.iniを /tmp/mysql.sock に変更してApacheを再起動したり my.cnfも同じ値にしているのですが (mysql.socは/tmp/にある) エラーが DB Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) に切り替わっただけでした。 mysqldが動いていないのかなーとも思うんですが どこから手をつけていいのかわからなくなっています。 ひとつ気になるのが、PHPのテストファイルで取得したinfoの MYSQLの 項目で MYSQL_SOCKET /var/lib/mysql/mysql.sock と出ていました。 これって関係あるんでしょうか。 別の設定があるのでしょうか・・・ それともやっぱりmysqldをあたってみたらいいのか。 みなさんのご意見をお聞かせいただければ幸いです。 あと参考になるような本があれば教えてください。 よろしくお願いします。

  • MySQLとの間でのソケットエラー

    あまりプログラミングを知らないので言葉がおかしいところあったらすみません。 とあるレンタルサーバーを借りてphpのプログラム(WordPress)を動かしています。 WordPressはME 2.2.3、phpは4.4.2、別のサーバーで動いているMySQLは4.0.26です(WWWサーバー、MySQLサーバーは専用ではなく共有)。 ここ数日なのですが、ブログの更新時やコメント投稿時に以下のエラーが出るようになりました(但し記事やコメント自体は投稿できています)。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) on line: 294 ネットで検索したところ、phpとMySQLをつなぐソケットというものの位置がおかしくなっていることが一因のようです。 phpinfo()で返ってくる値は"MYSQL_SOCKET /tmp/mysql.sock"となっており、 一方phpMyAdminでログインしてMySQLを確認したところ"socket /home/mysql/mysql.sock /home/mysql/mysql.sock"となっています。 このズレがエラーを引き起こしているのではないかと思うのですが、あいにくユーザーにはこれらを変える権限はないようです(php.iniを設定することは不可能)。 私がWordPressをインストールしなおして設定をいじれば対応できるようですが、その前にこうしたズレはよくあることなのか、それともレンタルサーバー側に問い合わせるべきなのか疑問に思ったので質問しました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpからmysqlへ接続できなくて困っております

    phpからmysqlへ接続したいのですが、データベースへ接続できません。 まず、使用環境は以下の通りです。 ------------------------------ OS:RedHatLinuxES4 MYSQL:mysql-4.1.7-4.RHEL4.1 PHP:php-4.3.9-3.1 MysqlとPHPはRedHatサイトのパッケージを使用してrpmでインストール しております。 MySQLのデータディレクトリをデフォルトの/var/lib/mysqlから /home/mysqlへ変更してます。 それに伴い、/etc/my.cnfのソケットとデータディレクトリの箇所 を変更しております。 <デフォルト設定> socket=/var/lib/mysql/mysql.sock datadir = /var/lib/mysql <変更後> socket=/home/mysql/mysql.sock datadir = /home/mysql ------------------------------ 色々調べていて原因は分かりました。 mysqlで指定しているソケットの場所と、PHPで指定している ソケットの場所が違うため、接続できないようです。 phpinfoにて情報を取得したところ、mysqlの箇所でソケットを指定 がデフォルト値の/var/lib/mysql/mysql.sockとなっておりました。 そこで、php.iniファイルのMYSQLの箇所を以下のように修正しました。 <デフォルト設定> mysql.default_socket = <変更後> mysql.default_socket = /home/mysql/mysql.sock 上記変更後、apacheを再起動し、再度phpinfoにて情報を取得した ところ、以下のようになりました。 MySQL Support項目、 MYSQL_SOCKET → /var/lib/mysql/mysql.sock #変更されず、反映されていないように見受けられるます Directive項目、 mysql.default_socket → /home/mysql/mysql.sock #php.ini修正前は確か、no valueであったと思います。 #従いまして、php.iniの内容が反映されている? --- その後、mysqlへ接続する、mysql_connect関数を利用して 接続テストを行った結果、エラーとなり接続できませんでした。 <エラーメッセージ> 接続できませんでした: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) --- おそらく、上記のphpinfo情報取得した時の、MYSQL_SOCKETが反映 されていないからだと思っておりますが、php.iniファイルの mysql.default_socketを修正すれば反映されると思ったにも関わらず 反映されないので、次にどこを修正すれば良いのか分かりません。 ご教授頂けませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPからMySQLに接続することができません。

    PHPからMySQLに接続することができません。 解決方法をご存じの方は教えていただけないでしょうか。 PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) 環境 OS:CentOS 5.3 DB:Mysql 5.0.67(ソースからインストール) Web:Apache PHPのソースの一部を以下に記します。   $db_host = 'localhost';//DB_NAME;   $db_user = 'user';//DB_USER;   $db_pass = 'pass';//DB_PASS;   $db = mysql_connect($db_host,$db_user,$db_pass); 以下の方法も試したのですが、エラーメッセージは変わりませんでした。   $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd") 端末のコマンドからMySQLへの接続は成功します。 ホスト名、ユーザー名、パスワードも上記と同一のものです。   $ /usr/local/mysql/bin/mysql -h localhost -u user -p   Enter password:pass 以上です。宜しくお願いします。

    • 締切済み
    • PHP
  • mysql_real_escape_string?

    mysql_real_escape_stringは、非推奨なのでしょうか? ▽PHP: mysql_real_escape_string - Manual   http://php.net/manual/ja/function.mysql-real-escape-string.php >この拡張モジュールを使うことはおすすめできません。 MySQLi あるいは PDO_MySQL を使うべきです この「拡張モジュール」って何を意味しているのでしょうか? 「mysql_real_escape_string」のことでしょうか? それとも、mysql_set_charset()などで、「デフォルトの文字セット」を設定しておけば、利用しても良いのでしょうか?

    • ベストアンサー
    • PHP
  • MySQLをPHPで使おうとして

    FedoraCore(192.168.0.101)に /var/www/html/index.php: <?php $link=mysql_connect("localhost","root","12") or die("Could not connect"); print"Connected successfully"; mysql_close($link); ?> を入れて他のPC(192.168.0.100)からこれを呼びましたが Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /var/www/html/index.php on line 2 Could not connect となり接続できません /var/lib/mysql/はありmysql.sockがありません どうしたらいいのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLが起動できない

    Can't connect to local MySQL server through socket '/tmp/mysql.sock'ていうエラーメッセージ が出てしまいます。解決方法を教えてください

    • ベストアンサー
    • MySQL
  • mysql_real_escape_string

    mysql_real_escape_stringについて調べていると、私と同じことを疑問に思い質問している人がいました。 こちらのページです。 http://okwave.jp/qa/q4423735.html mysql_real_escape_stringを通してDBに入れるとします。 すると、「テスト\」というデータをINSERTをするとDBには「テスト\」で入るのでしょうか? では、mysql_real_escape_stringを通さずにdbに入れても 「テスト\」というデータをINSERTをするとDBには「テスト\」で入ると思います。 上記のとおりとした場合、PHPはどうやってmysql_real_escape_stringを通したかどうか判定しているのでしょうか? 現在、mysql_real_escape_stringを通してDBに入れると、 「テスト\\」というデータがDBに入っています。 それをどうやって戻すのか調べていて、上記の質問を見つけました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP