PDO
PHP7
mysql5.7

MySQLからMySQLi,PDOへの書き直し

はじめに

この記事は文系出身の初心者(@azu369yu)が
PHPとMySQL学習をした際の忘備録として作成した記事となります。
その為、間違った情報が含まれている可能性があることを念頭に参照してください。
より良い方法があればコメントでお教え頂ければ幸いです。

なぜ書き換える必要が?

mysql関数はphp5.5以降は非推奨とされており、php7.0から廃止されてしまったため。
主にSQLインジェクションへの対策とその防止などが理由に挙げられる。
上記により、php7.0以降の環境下では、今までmysql関数で書かれてきたコードを書き直す必要がある。
コードの書き換えには、mysqlの拡張版であるmysqli(mysql improved)を使用するか、より汎用性の高い
PDO(PHP Data Object)を利用することができる。

mysqliでの書き換え

以前まで使われていたmysql関数に少し変更を加えるだけで利用できる。
オブジェクト指向が取り入れられ、データベース接続にクラスを使用する。

mysqli
    // 1. 変数の宣言
    $host = "localhost";
    $user = "root";
    $pass = "****";
    $db   = "test";
    $test = "MySQLi_Result: ";

    // 2. mysqliでデータベース接続
    $mysqli = new mysqli($host, $user, $pass, $db);
    if ($mysqli->connect_error){
        error_log($mysqli->connect_error);
        exit;
    }

    // 3. SQL文を実行、表示
    $sql = "SQL文";
    $sqlq = $mysqli->query($sql);
    if(!$sqlq){
        error_log($mysqli->error);

        exit;
    }
        while($row= mysqli_fetch_array($sqlq)){
            echo $test;
            echo $row['col1'];  
    }

    // 4. データベースから切断
    $mysqli->close();


PDOでの書き換え

MySQLのみならずその他のデータベースでも少し記述を変更するだけで使用できる。
メンテナンスや汎用性を残すならこちらを利用していくほうが良いのかも。

PDO
    // 1. 変数の宣言
    $dsn  = 'mysql:dbname=test;host=localhost';
    $user = "root";
    $pass = "localhost";
    $test = "PDO_Result:";

    // 2. try&catchを使いつつPDOでデータベース接続
    try{    
        $pdo = new PDO($dsn,$user,$pass);
    } catch (PDOException $e) {
        exit('データベースに接続できませんでした。' . $e->getMessage());
    } 


    // 3. SQL文を実行、表示
    $stmt = $pdo->query('SQL文');

    if (!$stmt){
        $info = $pdo->errorInfo();

        exit($info[2]);
    }
        while($data= $stmt->fetch(PDO::FETCH_ASSOC)){
            echo $testName;
            echo '<p>'. $data['col1'] ."</p>\n";
    }

    // 4. データベースから切断
    $pdo = null;

参考サイト

PHPLaboさん
@from_kyushuさん- MySQL関数からMySQLi関数への移行作業メモ