PHP:PostgreSQLで取得した全てのデータを配列で取得「pg_fetch_all」

phpPostgreSQLのデータを取得する時に、取得したデータ全て配列で取得したい場合があります。

pg_fetch_all()」を使用すれば「pg_query()」で実行した全てのデータを配列で取得することができます。

下記にpg_fetch_all()の説明と使用方法を記述します。

PostgreSQLはあまり使用することが少ないので、メモしておきます。


「pg_fetch_all()」の説明

取得した全てのデータを配列で取得します。

pg_fetch_all(クエリ結果)

「pg_fetch_all()」の使用方法

下記にpg_fetch_all()を使用した時の使用例を記述します。

<?php

// PostgreSQLに接続
$conn = pg_connect('host=localhost dbname=dbname user=username password=password');

// SQL文を実行
$result = pg_query('SELECT * FROM sample');

// 全てのデータを配列で取得
$data = pg_fetch_all($result);

// PostgreSQLを切断
$close = pg_close($conn);

?>

pg_fetch_all()で取得した値は下記のように配列で取得します。

Array
(
	[0] => Array
		(
			[id] => 1
			[name] => test1
			[status] => 1
		)

	[1] => Array
		(
			[id] => 2
			[name] => test2
			[status] => 2
		)

		・
		・
		・
)

データの取得方法は他にも色々ありますが、配列で全てのデータを取得する場合は
「pg_fetch_all()」を使用すると、配列で取得することができます。

PHP:配列内の同じ値を一つにまとめる「array_unique」

PHP配列同じ値が複数あった場合に一つまとめたい場合があります。

PHPの関数でarray_unique()を使用すれば、重複した値を削除することができます。

下記にPHParray_unique関数を使用して、配列内同じ値重複値)を取り除いた時の方法をメモします。


配列の重複値を削除「array_unique」

配列に重複した値がある場合、最初に出現した値が保持され、後の値は取り除かれます。

$arr = array('aaa', 'aaa', 'bbb', 'bbb', 'ccc');
$res = array_unique($arr);

配列の値

Array
(
    [0] => aaa
    [2] => bbb
    [4] => ccc
)

二つ以上、重複した値があった場合でも、後に出現した値は取り除かれます。

$arr = array('aaa', 'aaa', 'aaa', 'bbb', 'bbb');
$res = array_unique($arr);

配列の値

Array
(
    [0] => aaa
    [3] => bbb
)

配列に重複した値がない場合は、何もしないでそのまま出力されます。

$arr = array('aaa', 'bbb', 'ccc', 'ddd', 'eee');
$res = array_unique($arr);

配列の値

Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
    [3] => ddd
    [4] => eee
)

array_unique()は重複するデータなどを集計する場合などに便利です。

php:文字列の出力でechoとprintの違い

php文字列を出力する際は、echoprintを使用すると思います。

php初心者の方から

echoとprintをどちらを使えばいいのか?
echoとprintの違いはなんなのか?
どちらを使用するのが正しいのか?

などを聞かれたことがあります。

私はphpを覚えた時から文字列の出力はechoを使用していたので、
あまり気にしたことがありませんでした。

echo」と「print」を比較して、違いを調べてみたので下記にメモします。


「echo」と「print」の違い

○ 引数が違う

echoの場合は引数を「,」区切りで複数指定できます。

echo 'aaa', 'bbb';

出力結果

aaabbb

printの場合は引数は一つのみです。

print 'aaabbb';

下記の場合、エラーになります。

print 'aaa', 'bbb';

○ 戻り値が違う

echoの場合は戻り値がないです。
下記の場合、エラーになります。

$val = echo 'aaa';

printの場合は戻り値があり、1を返します。

$val = print 'aaa';
print $val;

出力結果

aaa1

文字列ではなく「1」が返ります。


私なりの結論ですが、phpで文字列を出力するのは、echoとprintのどちらも正しいです。

どちらでも文字列を出力するのは変わらないので、
その時の環境やルールに合わせるのがいいと思います。

また、printは戻り値があるから、echoの方が処理速度が速いようです。

PHP:URLのエンコードとデコード(urlencode,urldecode)

WEBページを作成する時に日本語のURLを使用することがあります。

下記のようなURLをブラウザのアドレスバーからコピーします。

http://raining.bear-life.com/テスト/

コピーしたURLをテキストエディタなどに貼り付けると下記のようになります。

http://raining.bear-life.com/%E3%83%86%E3%82%B9%E3%83%88/

「テスト」の箇所がエンコードされています。

phpの「urlencode()」を使用すれば、日本語文字列をエンコードすることができます。

また、逆にURLエンコードされた文字列をデコードする場合は「urldecode()」を使用します。

phpurlencodeurldecode関数を使用して、エンコードデコードをする方法をメモします。


URLエンコード(urlencode)

指定した文字列をURLエンコードします。

$str = 'テスト';
$str = urlencode($str);
echo $str;

出力結果

%E3%83%86%E3%82%B9%E3%83%88

URLデコード(urldecode)

指定したURLエンコードの文字列をデコードします。

$str = '%E3%83%86%E3%82%B9%E3%83%88';
$str = urldecode($str);
echo $str;

出力結果

テスト

URLエンコードで文字列に半角スペースがある場合は「+」になります。

PHP:サーバーのフルパスを調べる方法

WEBサイトを制作する時にサーバフルパスを調べたい場合があります。
例えば、Basic認証などを設定したい時などサーバのフルパスを記述するので必要になります。

使用するサーバによって、パスは様々です。

phpが使える環境であれば簡単にフルパスを調べることが可能です。
下記にphpサーバーフルパスを調べる方法をメモします。

FTP情報しかない場合などにいいと思います。


phpでサーバーのフルパスを調べる

phpファイルを作成し、下記のコードを記述します。
例:test.phpなど

<?php
echo __FILE__;
?>

作成した「test.php」をサーバにアップロードし、ブラウザでアクセスします。
アクセスすると、アップロードしたファイルまでのフルパスが表示されます。

表示例

/home/test/www/public/test.php

上記の方法でサーバーのフルパスを調べることができます。
アップロードしたファイルはフルパスを確認したら削除してください。