rakutoネット
お問合せ 免責事項 Q&A 掲示板 サイト管理 リンク サイトマップ
  • ツリー
  • 閲覧
  • 投稿
  • 検索

PDOのプレースホルダ

     投稿者:焼肉ますたー改   日時:2007-04-30 22:37:12

お久しぶりです。
待望の連休になるので、興味があったPDOを試してみました。

ちなみにWindows版PHP5.2とSQLite3です。

公式マニュアルページより、下記のコードを参考に似たような
コードを書いて実行したのですが

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
 
// 行を挿入します
$name = 'one';
$value = 1;
$stmt->execute();
 
// パラメータを変更し、別の行を挿入します
$name = 'two';
$value = 2;
$stmt->execute();
?>


エラーの内容からprepareやbindParamの部分がうまくいって
いないのだと思います。
接続やテーブル作成は問題なくできたようなのですが、
やはりPDO側に問題があるのでしょうか。
[編集]   [返信]

DB自体のバージョンは?

     投稿者:シロウ   日時:2007-05-01 17:49:08

お久しぶりです。ご投稿頂きありがとう御座います。

以下のコードを実行しましたがエラー無くInsertされました。
<?php
/* SQLiteハンドルの取得 */
$dbh = new PDO('sqlite:test3.db','', '');
 
/* テーブルの作成 */
$query = <<<QUERY
CREATE TABLE REGISTRY  (
    name VARCHAR(64),
    value INTEGER
);
QUERY;
$dbh->exec($query);
 
 
/* -------------------------------- */
/* http://jp2.php.net/pdo  サンプル */
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
 
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
 
// 行を挿入します
$name = 'one';
$value = 1;
$stmt->execute();
 
// パラメータを変更し、別の行を挿入します
$name = 'two';
$value = 2;
$stmt->execute();
/* -------------------------------- */
 
 
/* データの取得 */
$stmt = $dbh->prepare('SELECT * FROM REGISTRY'); 
$stmt->execute(); 
while ($cols = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    echo "----------------------<br />";
    echo "name  = {$cols['name']}<br />";
    echo "value = {$cols['value']}<br />";
    echo "----------------------<br />";
} 
/* カーソルを閉じる */
$stmt->closeCursor();
?>


私はSQLite2とSQLite3を使う機会が多く、たまにSQLite3
のプログラムで、SQLite2のDBにアクセスしてしまう事が
あります。
そうすると変なところでエラーがずっと出るなどを経験
した事があります。

以下のDBアクセス部分で新しいDB名で試してください。
new PDO('sqlite:test3.db','', '');
[編集]   [返信]

INSERTに成功しました

     投稿者:焼肉ますたー改   日時:2007-05-02 20:49:31

>以下のDBアクセス部分で新しいDB名で試してください。
>new PDO('sqlite:test3.db','', '');
やはり上記の部分が鍵だったのでしょうか。
INSERTに成功したようです。

現在、PDOを使える環境はローカルPCだけですが、SQLite3も
利用できるので、連休中にいろいろと試してみようと思います。
SQLite3もバージョンによってはAUTO INCREMENTも実装されている
ようなので、まず、次に試してみたい項目です。
(INTEGER PRIMARY KEYではidの並びがめちゃくちゃになってしまい、
かっこ悪いなぁと思ってました)。

今回うまくいかなかった部分が解決し、一通り簡単なSQLiteの
簡単な操作が行えそうなので明日からがんばってみます。

ありがとうございました。
[編集]   [返信]

カテゴリ

  •  Templateエンジンのすすめ Templateエンジンのすすめ
  •  SQLiteをやってみよう SQLiteをやってみよう
  •  SQLite SQLコマンド一覧 SQLiteコマンド一覧
  •  SQLite 管理プログラムSQLite 管理
  •  はじめてのEclipse はじめてのEclipse
  •  PHP SQLiteのTIPS PHP SQLiteのTIPS
  •  サンプル サンプル/ダウンロード
  •  リンク リンク
  •  掲示板 掲示板

キーワード検索

キーワード


Summary

  •     ATOM(XML)
  •     RDF(XML)
  •     RSS0.92(XML)
  •     RSS2.0(XML)

Powered by

  •     PHP
  •     Smarty
  •     SQLite
  •     MySQL
Copyright (C) 2005 `rakuto.net' All Rights Reserved.