8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-06

はじめに

この記事は文系出身の初心者(@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] (http://www.php-labo.net/tutorial/class/pdo.html)さん
@from_kyushuさん- MySQL関数からMySQLi関数への移行作業メモ

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?