PHP(PDO)でMySQL(MariaDB)に接続してDBからデータを取得する

今さらながらPHP7対応。
なぜか500エラーを連発してハマってしまったのでうまくいった書き方をメモしときます。

    function DBconnect()
    {
        $DBlink = mysqli_connect('yourdbhost.work', 'username', 'password');

        if (!$DBlink) {
            die('MYSQL接続エラー' . mysqli_error($DBlink));
        }

        mysqli_set_charset($DBlink, 'utf8');

        return $DBlink;
    }

    function DBselect($selectDB, $DBlink)
    {
        $db_selected = mysqli_select_db($DBlink, $selectDB);

        if (!$db_selected) {
            die($selectDB . 'データベース選択エラー' . mysqli_error($DBlink));
        }
    }

    function RunSQL($DBlink, $sql)
    {
        $result = mysqli_query($DBlink, $sql);

        if (!$result) {
            die('クエリーのエラー' . mysqli_error($DBlink));
        }

        return $result;
    }


    function h(string $string): string
    {
        return $string;
    }


    function myfunction()
    {

            $DBlink = DBconnect();
            DBselect('database', $DBlink);
            $records = RunSQL(
                $DBlink,
                "SELECT " .
                "*" .
                "FROM `table`" .
                "ORDER BY `key`;"
            );

            $result = [];

            while ($row = mysqli_fetch_array($records)) {
                //ここに処理を
            }
            return $result;

            mysqli_close($RDBlink);
    };

懐かしい感じですね。
これを↓のように変えさせてもらいました。

define('DSN', 'mysql:host=yourdbhost.work;dbname=dbname;charset=utf8');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');

try{
    $dbh = new PDO(DSN, DB_USERNAME, DB_PASSWORD,
     array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
        )
    );

    $prepare = $dbh->prepare('SELECT * FROM table ORDER BY key');
    $prepare->execute();

    $result = $prepare->fetchAll(PDO::FETCH_ASSOC);

    foreach($result as $r){

      //ここで処理を

    }


} catch (PDOException $e){
    $error = $e->getMessage();
}

コメント

タイトルとURLをコピーしました