📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の6版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
PHPにおいて、MySQLへの接続とCRUDの手順を記載する。<br> | PHPにおいて、MySQLへの接続とCRUDの手順を記載する。<br> | ||
<br><br> | |||
== 環境設定 (Windowsのみ) == | |||
PHPでMySQLを使用できるように、php.iniファイルの設定を変更する。<br> | |||
# php.iniファイル | |||
# 編集前 | |||
;extension=php_mysql.dll | |||
# 編集後 | |||
extension=php_mysql.dll | |||
<br><br> | <br><br> | ||
| 57行目: | 68行目: | ||
// データベースの接続を閉じる | // データベースの接続を閉じる | ||
mysqli_close($link); | mysqli_close($link); | ||
?> | |||
</syntaxhighlight> | |||
<br> | |||
また、MySQLへ接続するには、PDO拡張モジュールを使用することもできる。<br> | |||
<u>PDO拡張モジュールは、PHP 5.1から使用できる。</u><br> | |||
<br> | |||
PHP Data Objects(PDO) は、データベースに接続するためのインターフェイスとして機能する拡張機能である。<br> | |||
mysqliとは異なり、あらゆるデータベース機能を実行することができ、MySQLに限定されるものではない。<br> | |||
データベース間の柔軟な連携を可能であり、mysqliよりも汎用的である。<br> | |||
<br> | |||
PDOは、サーバ側とクライアント側のプリペアドステートメントをサポートしている。<br> | |||
<br> | |||
PDOの大きな強みは、クエリで起こりうるあらゆる問題に対処するための例外クラスを持っていることである。<br> | |||
これは、try-catchブロックを組み込むことによってこれらの問題を解決する。<br> | |||
<br> | |||
以下の例では、PDO拡張モジュールを使用して、MySQLサーバへ接続している。<br> | |||
<syntaxhighlight lang="php"> | |||
<?php | |||
$host = "localhost"; | |||
$username = "username"; | |||
$passwd = "password"; | |||
$dbname = "mydb"; | |||
$charset = "utf8mb4"; | |||
try { | |||
# DSN(database source name)は、データベースの種類と名前、およびその他の追加情報を定義する | |||
# PDOは様々な種類のデータベースをサポートしているため、別のデータベースを使用している場合は、構文(mysql)の部分を使用しているデータベースに置き換える | |||
$dsn = "mysql:host=$host; dbname=$dbname; charset=$charset"; | |||
# PDOコンストラクタは、データベースへの接続を確立する | |||
# 3つのパラメータを持っており、データソース名(dsn)、データベースのユーザ名、データベースのパスワードである | |||
$pdo = new PDO($dsn, $username, $passwd); | |||
# PDOにパラメータを設定するsetAttributeメソッド | |||
# PDO::ATTR_ERRMODEおよびPDO::ERRMODE_EXCEPTIONは、クエリが失敗した場合に例外を実行するようにPDOに指示する | |||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | |||
echo "Connection Okay"; | |||
# データベースに接続するためのPDO変数を返す | |||
return $pdo | |||
} | |||
catch (PDOException $e) | |||
{ # 接続に失敗した場合はエラーメッセージを表示する | |||
echo "Connection failed: ". $e->getMessage(); | |||
} | |||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 745行目: | 802行目: | ||
このように、'のような特殊な意味を持つ文字を、単なる文字の'として処理することができる。<br> | このように、'のような特殊な意味を持つ文字を、単なる文字の'として処理することができる。<br> | ||
<br><br> | <br><br> | ||
== 暗号化 / 復号 == | |||
データベースの接続情報を暗号化する場合は、openssl_encrypt / decrypt関数を使用して暗号化 / 復号を行う。<br> | |||
<br> | |||
暗号化キー (ENCRYPTION_KEY) と IV(ENCRYPTION_IV) は、ソースコードとは別の場所に保管する。<br> | |||
<br> | |||
また、INIファイルには暗号化された値を保存する必要がある。<br> | |||
<br> | |||
初期設定時において、以下に示すように値を暗号化して設定ファイルに保存する。<br> | |||
<syntaxhighlight lang="php"> | |||
$encrypted_password = encryptString('実際のパスワード'); | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 暗号化キーとIVを安全な場所に保存する | |||
define('ENCRYPTION_KEY', '<32[byte]の秘密鍵>'); | |||
define('ENCRYPTION_IV', '<16バイトのIV>'); | |||
// 暗号化関数 | |||
function encryptString($plaintext) | |||
{ | |||
$cipher = "aes-256-cbc"; | |||
$options = OPENSSL_RAW_DATA; | |||
return base64_encode(openssl_encrypt($plaintext, | |||
$cipher, | |||
ENCRYPTION_KEY, | |||
$options, | |||
ENCRYPTION_IV)); | |||
} | |||
// 復号関数 | |||
function decryptString($encrypted) | |||
{ | |||
$cipher = "aes-256-cbc"; | |||
$options = OPENSSL_RAW_DATA; | |||
return openssl_decrypt(base64_decode($encrypted), | |||
$cipher, | |||
ENCRYPTION_KEY, | |||
$options, | |||
ENCRYPTION_IV); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// 使用例 | |||
// INIファイルから読み込んだ接続情報を復号して使用 | |||
$host = decryptString($config['host']) ?? 'localhost'; | |||
$dbname = decryptString($config['dbname']) ?? ''; | |||
$username = decryptString($config['username']) ?? 'root'; | |||
$password = decryptString($config['password']) ?? ''; | |||
</syntaxhighlight> | |||
<br><br> | |||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Web]] | [[カテゴリ:Web]][[カテゴリ:MySQL]] | ||