メンバーメニュー

ようこそ、ゲストさん

質問

  • フリー PHP+MySQL

    接続
  • 本文:

    php5で独学で勉強して、今回php7に移行しようと思うのですが、全く動作しません、本やネットで色々と調べたのですが、どうしても上手くいきません。他にも変更すべき所は大分理解できましたが! 原因はMySQLへの接続が間違いではないかと?
    今までは下記のように記述しておりましたが、php7では具体的にどのように変更すれば良いのか、ご教示お願いします。

    $IT_db=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
    mysql_select_db($DBNAME, $IT_db);

    $SQL="select * from" . $TABLENAME0 . "where ID=" . $BANGOU . "";
    $Res=mysql_query($SQL,$IT_db);
    $Col=mysql_fetch_array($Res);

    mysql_free_result($Res);

  • 緊急度:通常投稿者:孫悟空さん投稿時間:2019/04/15 23:48

回答 No.8862

  • 本文:

    mysql モジュールは PHP 7 では使えないはず。

    https://www.php.net/manual/ja/mysqlinfo.api.choosing.php
    | おすすめの API
    | mysqli か PDO_MySQL のどちらかを使うことをおすすめします。
    | 古い mysql 拡張モジュールを新規開発で使うのはおすすめしません。 というのも、これは PHP 5.5.0 で非推奨となり、PHP 7 で削除されたからです。

    上記 PHP マニュアルを参考に、 mysqli を使うように書き直してみては?

  • 投稿者:ayaguchiさん 投稿時間:2019/04/16 00:06

回答 No.8863

  • 本文:

    mysql_connect と mysql_select_db に関しては
    mysqli で接続(必要に応じて mysqli_select_db の併用も可能ですが。)
    https://www.php.net/manual/ja/mysqli.quickstart.connections.php
    https://www.php.net/manual/ja/mysqli.select-db.php

    mysql_query に関しては
    mysqli_query
    https://www.php.net/manual/ja/mysqli.query.php

    mysql_fetch_array に関しては
    mysqli_fetch_array
    https://www.php.net/manual/ja/mysqli-result.fetch-array.php

    mysql_free_result に関しては
    mysqli_free_result
    https://www.php.net/manual/ja/mysqli-result.free.php

    になるのでは。

  • 投稿者:ayaguchiさん 投稿時間:2019/04/16 00:57
質問者からのコメント

ご教示有り難うございました。
もう一度頑張ってみます。

回答 No.8864

  • 本文:

    $IT_db=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD,$DBNAME);

    $SQL="select * from" . $TABLENAME0 . "where ID=" . $BANGOU . "";
    $Res=mysqli_query($IT_db,$SQL);

    $Col=mysqli_fetch_array ($Res);

    mysqli_free_result ($Res);

    =========

    ・PHP7からは、mysql_から始まる関数はすべて廃止
    ・mysqli_から始まる関数に書き換える必要あり
    ・引数の順番が微妙に違うものがある

  • 投稿者:k-tanさん 投稿時間:2019/04/16 06:38
質問者からのコメント

ご教示有り難うございました。
もう一度頑張ってみます。

回答 No.8865

  • 本文:

    php5.x で _動いていた_ ものを、php7.x 用に修正するだけなら、他の方々の説明どうりなのですが、
    php5.x での動作がもともと変なら、

    $SQL="select * from" . $TABLENAME0 . "where ID=" . $BANGOU . "";

    は、
     
    $SQL="select * from " . $TABLENAME0 . " where ID=" . $BANGOU . "";

    のように、fromの後やwhereの前に空白を入れるように変えた方がいいです。

    # それから、もう少し上達してからのことだと思いますが、
    # 他に、
    # $Res=mysql_query($SQL,$IT_db);
    # も、できれば、mysqli_prepare / mysqli_stmt_bind_param / mysqli_stmt_execute を使って
    # https://www.php.net/manual/ja/mysqli.prepare.php
    # のように、$BANGOU の部分は、別に代入するようにした方がいいです。
    # いわゆる「SQL injection」攻撃の対象になりがちなセキュリティ上の問題を起こしやすい書き方なので。
    ## 個人的には、mysqliを使うよりは、PDO_MySQLに書き直す方をお勧めします。

  • 投稿者:ジョバンニさん 投稿時間:2019/04/16 07:14
質問者からのコメント

有り難うございました。

今までは本からの丸写しで、とりあえず問題なく動作していましたので、気にもしていませんでした。
もう一度老体にむち打ってトライしてみます。