質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.55%

phpのmysql_real_escape_stringなどが使いたい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,226

progman

score 48

以前phpで開発したシステムをlamppに移行しようとしているのですが、
phpのバージョンが新しいもので
Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません 
といったエラーが出て正常動作しません。
phpの古いバージョンでサポートされていて、最新ではサポートされない機能を
結構使っているようです。

全機能をチェックして移行はとりあえず今はできないので、PHP 5.5相当で動かすには
どうすればよいでしょう?

昔のlamppでも入手するのがよいでしょうか?
どこで入手できるでしょう?
z
それとも何か互換モードのようなものがあって、旧仕様で動かすことはできないでしょうか?

lamppのphpはPHP 5.6.32で、このphpが動作して上記のようなエラーになっているのでしょうが、OS(centOS)上にはPHP 5.4.16 が入っています。
lamppのapacheで使用するphpを5.4.16の方に切り替えて使用するといったことはできないでしょうか?

また、環境は複数あってmacosではphp 5.6.21で正常動作しているのですが、centosでは
上記の通り5.6.32で

Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません 

というエラーが出ています。
phpのバージョンの問題とも限らないでしょうか?

centos上でlamppのphpバージョン確認
[root@localhost bin]# pwd
/opt/lampp/bin
[root@localhost bin]# php -v
PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

macos上でlamppのphpバージョン確認
SanPedro:XAMPP apple$ pwd
/Applications/XAMPP
SanPedro:XAMPP apple$ bin/php -v
PHP 5.6.21 (cli) (built: May 12 2016 03:39:40) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/28 23:19

    レスありがとうございます。
    残念ながら、私が質問していることの回答には全くなっていません。

    キャンセル

  • 2018/01/29 09:54

    参照先を読むと、PHP5.6ではmysql_real_escape_stringは(警告は表示されるが)サポートは一応継続されていることが分かるはずですが

    キャンセル

  • 2018/01/30 22:42

    レスありがとうございます
    警告が表示されることと、「サポートは一応継続」は関連ないですよね

    実際にはデータが落ちていて、警告メッセージが表示されるだけでなく、正常動作しません。
    他の返信にも書いてますが、mysql_real_escape_stringを外せば、正常動作します。

    macosでは警告もでず、正常動作
    centosでは警告メッセージが出て動作せずという状況です。

    キャンセル

  • 2018/01/31 07:39

    はい。警告は出ます。しかし、あくまで警告なので、「警告は出るが動作は正常」というのが5.6までの仕様です

    キャンセル

+2

phpinfo()でmysqlセクションは表示されますか?
されなければmysql_関連のモジュールがインストールされていないのだと思います。
もしインストールできていてもmysql_connect()を実行後にしか
mysql_real_escape_string()は有効になりません
そしてmysql_connect()はphp7では廃止されていますし、PHP5.x環境でも
廃止予定として「Deprecated」のコーションが表示されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/30 22:33

    レスありがとうございます。

    mysql関連のモジュールはインストールされています。

    ConnectionManager::getDataSource でコネクションを張っています。
    試しに一部の機能でmysql_real_escape_stringの記述をとると、その部分については
    DBアクセス機能も含め正常に動作します。

    しかし、mysql_real_escape_stringを使用すると最初の投稿の通りエラーとなります。

    キャンセル

  • 2018/01/30 22:37

    > ConnectionManager::getDataSource でコネクションを張っています。

    ちょっと状況がわかりません
    mysql_connect()を実行していれば使えるし、実行していなければ使えない
    というのが回答の主旨です

    キャンセル

  • 2018/01/30 22:49

    ConnectionManager って CakePHP のクラスでしょ?
    そこへもって、mysql_real_escape_stringを使うなどもってのほかです。

    キャンセル

  • 2018/01/31 06:58

    レスありがとうございます。

    当初(windowsとcentosphpの5.3.18など)環境開で、 ConnectionManager、mysql_real_escape_string
    でテストもOKだったのです。
    今も細かいテストはしていませんが、macosの環境では動いています。

    しかし、そもそもそんな使用は間違いで、たまたま動いていたのでしょう。
    ということでしょうか?

    しかし、そうではなくて
    mysql_real_escape_stringはインターフェース上、DBコネクト情報が必須でもなく
    ConnectionManagerも内部的にmysql_connect()を呼んでいて、その情報を参照して、
    うまく動作していた。
    mysqli_real_escape_string使うに、DBコネクト情報をうまく渡してやれば良いでしょう。
    という考えは成り立ちませんか?

    キャンセル

check解決した方法

0

わかっていることを整理しようと思います。
1.mysql_real_escape_stringはmysql_connect()と合わせ使用を前提としている。

2.私のAPは、Centos5.8やWindows7のPHP5.8のかnConnectionManager::getDataSource とmysql_real_escape_stringで使用して正常動作していた。
centos5.8の環境は現在もあり、正常動作している。(Windows環境はすでにない)

3.CentOS7.4 PHP 5.4.16 では2.のAPは
Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません 
というエラーが出て、また受け取り側にはデータが渡らず結果はNGとなる。
しかし、
MacOS 10.13.2 PHP 5.6.21ではエラーメッセージも出ず、動作も正常である。

合点が行かない部分もありますが、
結論としてCentOS7.4 PHP 5.4.16 などで使いたいなら、プログラム修正するしかないということだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る