phpからsqliteを使うときにはまったことを備忘録としてのこしておきます。備忘録ってのは日常ではほとんど役に立たないですが、ふとしたときに助けになることがあります。ですので大事なことです。
なぜsqliteなのか
phpといったらデータベースはmysqlのイメージですが、こちらはなにかとだるいイメージがあります。大してsqliteの場合は所詮ただのデータベースのファイルがそこにあるだけ。権限とかデータ型を気にしなくてよいのでお手軽です。(多分)
しかしこのsqliteをつかうときにけっこうはまりポイントがあったのでメモしておきます。
phpでsqliteを使うときにはまったポイント
phpの開発環境ではまった
phpってどうやって開発すればよいんだっけ?とかそんなレベルからはじまりました。Eclipseでプロジェクトをつくってごにょごにょするというのを思いつきましたがsqliteを使う予定だったので、どうもしっくりきませんでした。なので結局、仮想環境(ローカル開発環境)で開発することにしました。vagrantとvirtualboxを使うやつですね。ちなみに仮想サーバーのosはubuntuです。
幸いにも仮想サーバーの立ち上げからアクセスまでは、うる覚えながらも思い出すのははやかったです。
仮想サーバーにブラウザからアクセスする方法を忘れる
vagrantで立ち上げた仮想サーバーは【http://localhost】でアクセスできるんですが、これを忘れていました。これなんですがネット環境がなくてもブラウザからアクセスできます。ちょっと驚きました。(仮想サーバーの仕組みを理解してない証拠)
phpとapacheの確認方法を忘れる
phpを使うなら当然仮想サーバーにphpが入ってないといけないわけですから、とりあえず入ってるか確認します。(もう入れ方は忘れたけど)
$ php -v
次にapacheが入っているかの確認です。ウェブサーバーにはhttpdとapacheがあるのですが、ubuntuはdebian系なのでapacheです。
$ apachectl -v
apacheは仮想サーバーが立ち上がると勝手に立ち上がるようになっているのですが、一応apacheの状態を確認したい場合は以下のコマンドで確認できます。
$ sudo service apache2 status
apacheをたちあげると、【var/www/html】にあるファイルにブラウザからアクセスできるようになります。なぜそうなるかはわかりませんがとにかくアクセスできるようになります。たとえばindex.phpがあった場合、【http://localhost/index.php】でphpファイルにアクセスできます。
ここいらで開発準備は整ってきた感じですが、まだはまったところがありました。
phpファイルにchromeでアクセスすると、「このページは機能していない」となる
phpのコードをいろいろ書いてchromeで確認していると、最初はうまく表示されていたのに、「このページは機能していない」と表示されました。sqlite関係のコードを書いていたので、そのあたりがまずかったのかと思いましたが、
【単純な構文ミス】でした。というかそういうエラーは仮想サーバーにでるのでそちらを見ればいいだけの話だったのか思います。(エラーは結局確認してない)
おまけ
掲示板のようなものをつくろうとして、とりあえずsqliteからひっぱってきて表示まではできたってことで。
<?php
$db = new SQLite3("sample.db");
$sql = 'select * from posts';
$res1 = $db->query($sql);
$sql = 'select * from topics';
$res2 = $db->query($sql);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>sample</title>
<style>
*{
padding: 0px;
margin: 0px;
}
body{
width: 1100px;
margin: 0 auto;
}
h1{
font-size: 20px;
color: red;
text-align: center;
margin: 8px 0px;
}
p{
margin: 8px 0px;
}
input[type="textarea"]{
width: 100%;
height: 100px;
margin-bottom: 20px;
}
.news .date, .topics .date{
float: left;
width: 200px;
border-right: solid 1px #ccc;
}
.news .content, .topics .content{
padding-left: 200px;
width: 100%;
}
.news{
float: left;
}
.topics{
float: right;
}
.box{
border: solid 1px #ccc;
padding: 20px;
}
.post_area{
margin-bottom: 30px;
}
</style>
</head>
<body>
<h1>news topics 編集画面</h1>
<form id="fm">
<div class="post_area">
<p>タイトル</p>
<input type="text">
<p>本文</p>
<input type="textarea">
<input type="submit" value="投稿">
</form>
</div>
<div class="news">
<h2>news</h2>
<div class="box">
<?php
while($row = $res1->fetchArray()){
echo '<p class="date">' . $row[1] . '</p>';
echo '<p class="content">' . $row[2] . '</p>';
}
?>
</div>
</div>
<div class="topics">
<h2>topics</h2>
<div class="box">
<?php
while($row = $res2->fetchArray()){
echo '<p class="date">' . $row[1] . '</p>';
echo '<p class="content">' . $row[2] . '</p>';
}
?>
</div>
</div>
</body>
</html>

コメント