PHP + MySQL のデータ挿入

PHP + MySQL のデータ挿入
#03 データを挿入してみよう (1)
http://dotinstall.com/lessons/basic_php_advanced/6903
を参考に
プリペアステートメントを使ったDBへのデータ挿入を学習
SQL文をつくるとき
データをエスケープしなくてはならない場合
プリペアードステートメントを使うのが一般的
エスケープさせるのは
DB破壊されるのを防いだり
いろいろと悪意あるコードを使われるのを防ぐため
いままでは
query()をつかっていたけど
プリペアードステートメントを使う場合には
prepare() をつかってSQLを発行する
$stmt = $dbh->prepare(“insert into users(name,email,password) values(?,?,?)”);
values() の中身が
?,?,?
となっているけど、これはプレースホルダーといって
ここにはいる命令を次の文に埋め込むときに使われる
埋め込むには
execute() をつかい、配列で与える
今回なら
name = n
email = e
password = p
という単純なものにするので
$stmt->execute(array(“n”,”e”,”p”));
とする
最後にわかりやすくするため
echo “done”;
としてページを開くと
DBにデータがかきこまれている
確認するには
mysql -u root -p
でログインして
use blog_app;
select * from users;
で中身を確認すると
今回挿入した内容が反映されているのが確認できる
ちなみに、後から書き込むための
?,?,?
ではわかりにくい場合
別の書き方がある
この場合、?の代わりに :変数名
というようにする
今回なら
values (?,?,?)
の代わりに
values (:name,:email,:password)
というようにしている
この場合だと
execute() の中身も
execute(array(“n”,”e”,”p”))
から
連想配列のように
execute(array(“:name”=>”n2″,”:email”=>”e2″,”:password”=>”p2″)
というように
先にプレースホルダーで指定した
:変数名=>
が各値につくようになる
確認するには
mysql -u root -p
でログインして
use blog_app;
select * from users;
で中身を確認すると
今回挿入した内容が反映されているのが確認できる
どちらでも同じだけど
ソースコードのメンテなどの保守も考えると
わかりやすいほうを選ぶほうがよいと思う

PHP でDBのデータの表示

PHP でDBのデータの表示
#02 データを全件表示してみよう
http://dotinstall.com/lessons/basic_php_advanced/6902
を参考に
DBアクセスして、テーブル内のデータ全件表示方法を学習
そして、レコード件数の表示についても学習
今回は処理について
sql 文は、PHPの場合変数へ格納することができる
$sql =”select * from users”;
そして、この変数に格納したSQLを実行するには
query()
を使う
この query() で実行された結果も
PHPなら変数へ格納することが可能
$stmt =$dbh->query($sql);
ちなみに、$dbh は
接続するDB情報が格納されている変数で
$dbh = new PDO(‘mysql:host=localhost;dbname=blog_app’,’dbuser001′,’dbpwd0001′);
となっている
この変数に格納されたSQL実行結果の取りだしには
fetchAll() を使う
今回は
$stmt に格納されているので
$stmt->fetchAll(PDO::FETCH_ASSOC)
というようにする
これを foreach() でまわしながら取得する
foreach($stmt-?fetchAll(PDO::FETCH_ASSOC) as $user){
var_dump($user[‘name’]);
}
これは
$stmt->fetchAll(PDO::FETCH_ASSOC)
の中身を
$user に1つずつとりだして代入している
var_dump() のところの
$user は、いわばDBの内容になる
そして、
$user[‘name’]

name は
DB の users にある name の部分ということ
これを追記して
結果が
string(7) “taguchi” string(6) “tanaka” success!
というようになれば成功
おなじになっているのか確かめるには
mysql -u root -p
でログインして
use blog_app;
select * from users;
を実行して、この結果とおなじか確かめることができる
次に、件数の表示
これは
まずは、query() の中に件数を表示するSQLを記述
$dbh->query(“select count(*) from users”)
そして、この結果を
fetchColumn() で取得
これで件数がわかるので
echo で出力すればOK
あとは、わかりやすいように
PHP では . で javascript の + みたいに文字をつなげられるので
. “records found”
というように文字をつなげる
これらをソースにすると
echo $dbh->query(“select count(*) from users”)->fetchColumn() . “records found”;
というようになる
これで
2records found
と表示される

PDO で DB接続

#01 データベースに接続してみよう
http://dotinstall.com/lessons/basic_php_advanced/6901
を参考に、PODによるDBの接続
ただし、DBが必要なので
先に作成しておく
つかうDBは今回は mysql
vim setdata.sql
で sql ファイルを作成
create database blog_app;
grant all on blog_app.* to dbuser@localhost identified by ‘dbpw0001′;
use blog_app;
create table users (id int(11) not null auto_increment primary key,name varchar(50),email varchar(255),password varchar(16));
insert into users(id,name,email,password) values(10,’taguchi’,’taguchi@gmail.com’,1234);
insert into users(id,name,email,password) values(11,’tanaka’,’taguchi-tanaka@gmail.com’,1234555);
という内容で保存
mysql -u root -p < setdata.sql でDB作成 作業ディレクトリ作成ということで mkdir /var/www/myphp ここに index.php を作成して実行 PHPからDB接続するには try{ 接続処理 }catch(){ 例外処理 } というようにする PDO接続するには $変数名 = new PDO(); というように書く 今回なら $dbh = new PDO(); ちなみに、 dbh はdata base handler の略 実際にDB接続するときの構文は $変数名 = new PDO('mysql:host=ホスト名;dbname=DB名','DBのユーザ名',.'DBのパスワード'); となる 今回は DB=blog_app ホスト名=localhost DBユーザ名 = dbuser001 DBパスワード = dbpw0001 なので $dbh = new PDO('mysql:host=localhost;dbname=blog_app','dbuser001','dbpwd0001'); となる 次にエラー処理 これは catch() のところに書く catch(PODException $e){ var_dump($e->getMessage());
exit;
}
として終了する
もし、DB切断にしたいのなら
$dbh =null;
というように
$dbh のような変数に null をいれればOK
catch(PODException $e){
のところは java などでもよくみるので
経験あるとわかりやすいかも
ちなみに、exception は例外という意味
そして、DB接続成功なら
echo “success!”;
と表示するようにする
これで
success
と表示されているなら成功

php-pdoとpdo_mysqlをインストール

SQLSTATE[28000] [1045] Access denied for user
がでてきたので、
php-pdoとpdo_mysqlをインストールしてみました
実際の問題は、ただ単に面倒だったのでコピペで sql ファイルを
作ったのが失敗で、全角文字が入っていたというだけでしたが
今回、使用した環境は
CentOS 6.4 64bit
http://www3441ui.sakura.ne.jp/wordpress/?p=479
を参考に実行
yum install mysql-devel
cd /usr/lib64/php/modules/
pecl install pdo_mysql
あとは
extension=pdo.so
extension=pdo_msql.so

/etc/php.ini の 937 行目あたりに追記して
apache再起動
これで設定完了

AmazonS3 でサイト運用

AmazonS3 でサイト運用
#16 S3でウェブサイトを運用する
http://dotinstall.com/lessons/basic_aws/9516
を参考に
S3でのサイト運営について学習
まず、Create Bucket でバケット作成
Bucket Name には
独自ドメインを設定する
作成できたら
バケットの設定を変更する
Permissions
Website
この2つを変更する
まず、permissions で
Add bucket policy
にチェックを入れる
すると
sample bucket policys へとんで
2番目をコピーしてはりつける
そして、bucket の部分を独自ドメインに変更
このbucket policy を設定することで
公開する設定を毎回やらなくてよくなる
次に web site
これは
Enabled にチェックをいれて
index Document に
最初に表示するファイル
大抵の場合は
自作した index.html になるので
index.html を記述
あと、Error Documents には
エラーのときのファイルを指定するけど
とくに指定しなくても稼働はできる
設定終了後、save をクリック
あとは、必要なファイルをアップロードしていけばサイトの出来上がり

フォームからのデータ受け取りについて

フォームからのデータの受け取りについて
#32 フォームからのデータを受け取ろう
http://dotinstall.com/lessons/basic_php_beginner/6832
でフォームからの値の受け取りについて学習
PHPのフォームから受けとったデータを処理するのに使う
今回の注目点は
<form action=”get_info.php” method=”post”>
のところ
これは
get_info.php に送信して
送信はPOST形式で送るというもの
今回、送るデータは
<input type=”text” name=”birthday” value=””>
のところ
受けとるほうは
$birthday = $_POST[‘birthday’];
として受けとる
ちなみに、送信方法が
method =”get” だった場合
$_GET になる
そして、このbirthday の値を元に曜日を返すようにする
これは
date() をつかう
フォーマットには l を使うと曜日になり
UNIXタイムで取得するので
strtotime($birthday)
という引数にする
$youbi = date(“l”,strtotime($birthday));
これで、
フォーマット l で 曜日にした birthday のデータが
$youbi に格納される
あとは、この $youbi をHTMLのソースのほうで
echo で出力する
<?php echo htmlspecialchars($youbi); ?>
とすればOK
出力するときには
htmlspecialchars() で無害化するのを忘れずに

PHP でファイルからデータ読み出し その2

PHP でファイルからデータ読み出し その2
#31 ファイルからデータを読み出そう (2)
http://dotinstall.com/lessons/basic_php_beginner/6831
に、もっと簡単なデータの読み出しがあったので
これも学習
これは
file_get_contensts()
を使う
これも変数に格納できるので
$contents = file_get_contents($testfile);
でもOK
また、URLを指定することも可能
$contents = file_get_contents(“http://dotinstall.com”);
とすれば、ドットインストールのソースを
とってくるということもできる
あと、
$contents =file($testfile);
というように
file() を使うと、指定したファイルの内容を
1行ずつ読み込むようになる
使い道としては
web api 関連が一番おおそう

PHP でファイルからデータ読み出し

PHP でファイルからデータ読み出し
#30 ファイルからデータを読み出そう (1)
http://dotinstall.com/lessons/basic_php_beginner/6830
を参考にファイルからデータ読み出しを学習
今回、書き込みに使ったように
読み込みでも
fopen() を使う
ただし、今回のモードは
r
となる
そして、できたかどうか判定するため
if を使って判定する
if(!$fp = fopen($testfile,”r”)){
この判定がうまくいったら
ファイルの読み込みをするので
fread() を使う
第1引数に、ファイルポインタ
第2引数に、ファイルサイズを指定する
ファイルサイズ指定は、大抵の場合はファイルサイズの最大値になるので
filesize($testfile)
というように対象のファイルを格納した変数になることがほとんど
ちなみに、今回の動画だと
$testfile =”test.dat”;
と指定しているので
filesize($testfile)
としている
この読みこんだものは変数に格納可能
$contents = fread($fp , filesize($testfile));
あとは
var_dump() で中身を確認
ファイルを開いた場合、クローズは閉じるのがセットなので
fclose($testfile);
で閉じることを忘れずに

PHP でファイル書き込み

PHP でファイル書き込み
#29 ファイルにデータを書き込もう (3)
http://dotinstall.com/lessons/basic_php_beginner/6829
を参考に、PHPでのファイル書き込みに付いて学習
この判定にはif を使う
if(fwrite($fp,$contens) === false){
echo “could not write”;
exit;
}
これで false だった、つまり書き込みできないのなら
echo “could not write”
を実行して
exit で終了している
PHP の場合 === として == とおなじ意味になる
正確には、==より厳密な比較になる
これだと型まで比較できるようになる
if(fwrite($fp,$contens) === false){
echo “could not write”;
exit;
}
で成功したら
echo “success”;
で表示して
最後にファイルを開いたら閉じるので
これには fclose() をつかう
C言語でも ファイルのオープン、書き込み、ファイルクローズがあるけど似た様な処理になる
今回の場合には
fclose($fp);
となる
実行するとからのファイルへ
追記されているのがわかる
Ubuntu でおこなうときには
chmod 777 test.dat
としてパーミッションを変更する必要があるので注意

UNIXタイムの取得

UNIXタイムの取得
#25 日付/時間関数を使ってみよう (1)
http://dotinstall.com/lessons/basic_php_beginner/6825
を参考に
UNIXタイムの取得について学習
UNIXタイムからの経過時間をみるには
var_dump(time());
でみれる
また、mktime()で指定した時間のUNIXタイムで表示できる
引数は
時間、分、秒、月、日、年
の順番
例えば
2013/6/17 7:55:00
なら
mktime(7,55,0,6,17,2013)
となる
strtotime()
これは、日付の文字列からタイムスタンプを作成する
strtotime(“2013/6/17 7:55:00”)
とすると
UNIXタイムが表示される
このstrtotime()は使い勝手がよく
strtotime(“last Sunday”)
とすれば先週の日曜日のUNIXタイムを表示し
strtotime(“+ 2day”)
とすれば、2日後のUNIXタイムを表示できる

から送られてきた高速メモ帳