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

一ヶ月前までのデータを抽出する

日付が入っているカラムで、一ヶ月前までのデータを抽出する

$today = date(“Y-m-d”);
$onemonthago = date(“Y-m-d”,strtotime(“-1 month”));

$sql = “select colum_A, colum_B from tbl_A where colum_C between ‘” . $onemonthago . “‘ and ‘” . $today . “‘”;

Puyo / Pastaza

PHPでかんたんな画像アップローダー

保存先のフォルダを選べる画像アップローダを作成する

upload.phpのフォーム部分を記述します。

<table>
<form action=’upload.php‘ method=’post’ enctype=’multipart/form-data’>
<tr>
<td>ファイル:</td>
<td><input type=’file’ name=’upfile’ size=’30’></td>
</tr>
<tr>
<td>保存先:</td>
<td>
<select name=’folder’>
<option value=’img01/’>フォルダ1</option>
<option value=’img02/’>フォルダ2</option>
</select>
</td>
</tr>
<tr>
<td colspan = ‘2’ align=’center’>
<input type=’submit’ value=’アップロード’>
<input type=’hidden’ name=’phase’ value=’receive’>
</td>
</tr>
</form>
</table>

enctype=’multipart/form-data’

  • フォームからデータを送信するためのエンコードです。

    [upfile][name] ファイル名

    [upfile][type] ファイルタイプ image/jpeg など

    [upfile][tmp_name] アップロードされたファイルに一時的につけられる、パスを含むテンポラリファイル名 /tmp/phpJP00Aqなど

    [upfile][error] エラーがなければ0

    [upfile][size] ファイルサイズ

    が送られます。

phaseがreceiveだったら受け取る部分を実行します

if($phase == ‘receive’){

/***  受け取ったあとの処理 ***/

if( is_uploaded_file($_FILES[“upfile”][“tmp_name”])or die(“its not uploaded file”)){
if( move_uploaded_file($_FILES[“upfile”][“tmp_name”], $_POST[“folder”] . $_FILES[“upfile”][“name”])or die(“couldnt move the file”)){
chmod($_POST[“folder”] . $_FILES[“upfile”][“name”], 0644);
$file_name = $_POST[“folder”] . $_FILES[“upfile”][“name”];
$message = “ファイルをアップロードしました。


コレさえ覚えれば

Fortaleza / Ceará

PHP+MySQLでWEBプログラミング

//DBへ接続
$con = mysql_connect($DBSERVER,$DBUSER,$DBPASSWORD);

//DBを選択
$selectdb = mysql_select_db($DBNAME);

//SQL文を発行
$sql = “select * from tbl”;

//SQL文を実行
$rst = myqsl_query($sql,$con);

//結果を格納
$lst = mysql_fetch_array($rst);

//結果を収納するメモリを開放
mysql_free_result($rst); ← コレ

//接続を切断
mysql_close($con); ← コレ

MySQL + PHP 文字化けの解決

manaus / amazonas masomi79

とにかくUNICODEに

my.confの設定など

:::PHPバージョン:::::

4.3.9

:::MySQLバージョン:::::

mysqladmin version
mysqladmin Ver 8.41 Distrib 4.1.22, for redhatlinuxgnu on i386

Server version 4.1.22
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
:::現在の文字セット:::::

mysql>SHOW VARIABLES LIKE ‘char%’; 

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

上記の状態でmysqlから抽出したデータの日本語部分が?????に化ける。

下記の一文を挿入して解決

$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD)or die(“Could not connect\n”);
$select_db = mysql_select_db($DBNAME)or die (“Could not select\n”);
$sql = “select * from table”;
$alt = mysql_query(“set names utf8”,$con);
$rst = mysql_query($sql,$con);

http://phpspot.net/php/pgMySQL4.1%8CnUTF-8%82%CC%8F%EA%8D%87.html

http://www.res-system.com/weblog/item/467

http://www.artful.jp/blog/archives/2006/07/xamppmysqlphpmy.html

http://tod.cocolog-nifty.com/diary/2005/12/xamppphpmysql_6279.html

http://blog.cheki.net/archives/349

MANAUSの河岸で暮らす人