あずきみるくのあずきはニガテ - for Engineer

ひよっこプログラマがやってみたことやハマっちゃったことなど、備忘録的な感じで書いていきます。

PHPいろいろ - DB(MySQL)につなごう!

前回、初めてPHPに触れたわけですが。

先生がいきなり難易度をものっそい上げてきたので。。。
いきなりですが、DB接続しちゃいます。

<環境>
Windows 8.1
PHP 5.5.21
MySQL Server 5.6
Apache 2.4.10


では、Let's Start!!

1)php.iniの編集

php.iniは基本的にPHPをダウンロードした直下におります。
ずぼらなあずきはダウンロードした時かフォルダ名を変更していないので、
「C:\php-5.5.21-Win32-VC11-x64\php.ini」におります。

1.1 「extension=php_mysqli.dll」の有効化

初期状態ではコメントアウトされています。
行頭の「;(セミコロン)」を消して、有効化してください。
f:id:azuki-milk-lush:20150205173646j:plain

※画像は「extension=php_mysql.dll」になってますが、「extension=php_mysqli.dll」です!
あとで、わかります!!

1.2 拡張モジュールのディレクトリ設定

先ほど、有効化した「php_mysqli.dll」は拡張モジュールです。
※拡張モジュールっていうのは、追加機能、って意味だと認識しています。

有効化させたはいいけど、こいつのいる場所を設定しなければなりません。

1.2.1 現状とやることの確認

じゃあ、今はどんな設定になっているの?

っていうのを確認します。

ちょっとめんどくさいけど、これだけ書いたファイル作って実行してみてください。

<?php
	phpinfo();
?>

こんなの、でてきたでしょ?
f:id:azuki-milk-lush:20150205174320j:plain

で、「Core」の項目見てください。
「extension_dir」っておるでしょ?
f:id:azuki-milk-lush:20150205174530j:plain

現状は「C:\php」っていうとこにいるよ、って設定になってますが、その場所を探しても「php_mysqli.dll」はいません。

じゃあ、どこにいるのか。
「C:\php-5.5.21-Win32-VC11-x64\ext」の中です。

なので、ここを拡張ディレクトリとして、設定しないといけないのです。

1.2.2 php.iniの編集

ここで、再度php.iniの登場です。

「extension_dir」はコメントアウトされているので、「;」を消して有効化して、書き換えます。
f:id:azuki-milk-lush:20150205175223j:plain

1.2.3 確認

先ほどのphpinfoを実行したページを更新してみましょう。
f:id:azuki-milk-lush:20150205175546j:plain
はい、変わりましたね。

もし、更新されない場合はApache再起動でもしちゃってください。

2)MySQLでテーブル作成

えっと・・・すみません。

アクセスするテーブルができている前提で話を進めてますので、もしDBをインストールされてない、とか、テーブルなんもない!って方は大変申し訳ございませんが、適当に作ってから次へお進みくださいm(_ _)m

3)PHPファイルの作成

では、こんな感じで作ってください。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>PHP DBAccess TEST</title>
</head>
<body>

<?php
//DBへの接続
$mysqli = new mysqli("localhost", "(ユーザ名)", "(パスワード)", "(スキーマ名)");

// 接続状況チェック
// mysqli_connect_errno : 直近の接続コールに関するエラーコードを返却
if(mysqli_connect_errno()){
	// mysqli_connect_error : 直近のエラー内容を文字列で返却
	die('接続失敗です。'.mysqli_connect_error());
}

print('<p>接続に成功しました。</p>');

// mysqli_close : DB切断
$close_flag = mysqli_close($mysqli);

if ($close_flag){
    print('<p>切断に成功しました。</p>');
} else {
	die('切断失敗です。');
}
?>
</body>
</html>


なんか。。。めっちゃ簡単ですね。
接続情報、直書きなのが気になりますが。。。そんなもんなんでしょう。。。か?

4)実行

とりあえず、実行してみます。

f:id:azuki-milk-lush:20150205183711j:plain

きましたよ!!


でも、結局まだSQL投げてないねぇ。。。
これからやりますか。



お暇な方はおまけもどうぞ。


5)おまけ

あずきは当初、「php_mysql.dll」を使用してました。
ほんで、こんなコードを書いてたんです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>PHP DBAccess TEST</title>
</head>
<body>

<?php
// 「mysql_connect」がDB接続の関数
$link = mysql_connect('localhost', 'root', 'poweredge154');


if (!$link) {
	// 「die」関数はメッセージを出力して現在のスクリプトを終了
    die('接続失敗です。'.mysql_error());
}

print('<p>接続に成功しました。</p>');

// 「mysql_connect」がDB切断の関数
$close_flag = mysql_close($link);

if ($close_flag){
    print('<p>切断に成功しました。</p>');
}
?>
</body>
</html>


で、実行。

f:id:azuki-milk-lush:20150205181515j:plain

・・・おやぁ?

出るには出たんですが。。。
なんだこれ?

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\pleiades\workspace\PHP\PHPSample\htdocs\dba.php on line 10

つまり、この拡張モジュールはもうそろそろ非推奨になるから、代わりに「mysqli」か「PDO」を使ってください、ってことでしょうか。

※調べてみると、php 5.5.12 から、移行になったようです。
なんてこった。。。


と、いうわけで、再度php.iniを編集に行きます。

ほんで、実行。


・・・えらー出た。。。

Fatal error: Call to undefined function mysql_connect() in C:\pleiades\workspace\PHP\PHPSample\htdocs\dba.php on line 10

・・・その関数のまんまじゃ接続できねーんだよ!ってことでしょうか。

仕方なく、こちらを参考に、めそめそやります。。。
http://manual.xwd.jp/function.mysqli-connect.html



んで、本編のとおり、うまくいったわけです。


よく考えたら、これだとスキーマ名指定してないよね?
どうしてたんだろ?


ま、ともかく、接続できた、ってことでめでたし、めでたし♪