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();
}

//ディレクトリ・ハンドルを開く
$res_dir = opendir( '/var/www/hogehoge' )or die('could not open');
//ディレクトリ内のファイル名を1つずつを取得
$_hogehoge = array();
while( $file_name = readdir( $res_dir ) ){
//配列に格納していく
array_push($_images,$file_name);
}
//ディレクトリ・ハンドルをクローズ
closedir( $res_dir );
\$  ドルマーク
\\ 円マーク

gdライブラリを利用してサムネイルを作成する画像アップローダを作る

保存先ディレクトリを選択できる画像アップローダー

/***  受け取ったあとの処理 ***/
//格納するディレクトリ
$updir = "../images";
//アップロードされたファイルが存在するかどうかを確認
if( is_uploaded_file($_FILES["upfile"]["tmp_name"])or die("no")){
//アップロードされたファイルをディレクトリへコピーする
if( move_uploaded_file($_FILES["upfile"]["tmp_name"], $updir . "/" . $_FILES["upfile"]["name"])or die("nono")){
chmod($updir . "/" . $_FILES["upfile"]["name"], 0644);
$file_name = $updir . "/" .  $_FILES["upfile"]["name"];
}else {
print "ファイルをアップロードできません。";
}
} else {
print "ファイルが選択されていません。";
}
//アップロードした画像を加工する
$image = ImageCreateFromJPEG($file_name);
    //元画像のサイズを取得する
$size = getimagesize($file_name);
$old_width = $size[0]; //横
$old_height = $size[1]; //縦
    //いろいろ出力して確認しながら。。。
//print "<br>画像の横幅:" . $old_width ."<br>";
    //サムネイルの横幅
$new_width = "80";
    //縦と横が同じ比率で圧縮されるように計算する
$rate = $new_width / $old_width;
$new_height = $old_height * $rate;
//print "圧縮比:" . $rate . "<br>";
    //縮小された画像を貼り付ける(?)画像を作成する
$new_image = ImageCreateTrueColor($new_width, $new_height);
    //imagecopyresizedで元画像を圧縮する
if(ImageCopyResized($new_image, $image,0,0,0,0,$new_width,$new_height,$old_width,$old_height)){
print "圧縮されました";
}
//サムネイルを保存するためのパスとファイル名。ここではthumというディレクトリを作ります
$updirthum = $updir . "/thum/" . $_FILES["upfile"]["name"];
//imageJPEGで圧縮した画像をJPEGとして保存します。
imageJPEG($new_image, $updirthum)or die("could not save image");
画像IDを破棄します
imagedestroy ($dst_img);
imagedestroy ($src_img);

ちなみに縮小した画像を表示するには

header("ContentType: image/jpeg");
imagejpeg($new_image);

とします。

imagejpegの前にヘッダー情報を出力しないと、もしくはヘッダー情報の前に何か出力してると、
画像が文字列で出力されてしまいます。。。

画像の表示はできるのに保存ができず2,3日困ってしまいましたが、ただのパーミッッションの
問題だったようです。

SSHでログインして

chmod [775] [ディレクトリ名]

で解決しました。
保存先を別のディレクトリにしてるときは注意

in_array serch_array

$hogehoge = array();
for($i=0;$i>=100;$i++){
if(($i%3) == 0){
array_push($hogehoge,$i);
}
}
if(in_array($check,$hogehoge)){
print "その数は配列に存在します";
}else{
print "その数は配列に存在しません";
}

in_array serch_array

$hogehoge = array();
for($i=0;$i>=100;$i++){
if(($i%3) == 0){
array_push($hogehoge,$i);
}
}
if(in_array($check,$hogehoge)){
print "その数は配列に存在します";
}else{
print "その数は配列に存在しません";
}

現在のurlを取得する $_SERVER['REQUEST_URI']

ユーザーが選択した結果に基づいて生成されたページにさらに変数をくっつけてリロードする場合

$_SERVER['REQUEST_URI']

で現在の状態のURLを取得できます。
例えば

http://www.hogehoge.org/index.html?option=QrYQZRQVNQsNZN
のページで

$link = $_SERVER['REQUEST_URI'];

としておいて

<a href='" . $link . "&option2=hoge'>

とすると
http://www.hogehoge.org/index.html?option=QrYQZRQVNQsNZN&option2=hoge
へのリンクが作れます。

割り算の余りの処理

floor 余りを切り捨てる
ceil 余りを切り上げる
round 四捨五入
$x = 10;
$y = 3;
print floor($x / $y);
print ceil($x / $y);
print round($x / $y);
:実行結果:::

343

round は四捨五入する際の桁数も指定できます

print round($x / $y, 3);
:実行結果:::

3.333