TOP書籍連動> singleQuery()メソッド




SQLiteの高度な活用術
SQLiteの高度な活用術

第4回:SQLiteDatabaseの拡張のメソッドの紹介

著者:Peter Lavin   2006/4/19
前のページ  1  2
singleQuery()メソッド

   以下のコードはsingleQuery()メソッドを使用して、レコードセットや配列ではなく単一の整数値を取得しています。
$totalrecords = $db->singleQuery(
'Select COUNT(*) FROM tblresources', true);


queryExec()メソッド

   最後にqueryExec()メソッドです。このメソッドは主にトランザクション処理を行うために使用されます。リスト7に掲載した例を見てください。

リスト7
BEGIN TRANSACTION;
CREATE TABLE tblresources(
    id INTEGER PRIMARY KEY,
    url VARCHAR(255) NOT NULL UNIQUE default '',
    email VARCHAR(70) NOT NULL default '', 
    precedingcopy VARCHAR(100) NOT NULL default '',
    linktext VARCHAR(255) NOT NULL default '',
    followingcopy VARCHAR(255) NOT NULL default '',
    target VARCHAR(35) default '_blank',
    category VARCHAR(100) NOT NULL default '', 
    theirlinkpage VARCHAR(100) default NULL,
    whenaltered TIMESTAMP default '0000-00-00',
    reviewed BOOLEAN default 0,
    whenadded DATE default '2005-01-01');
CREATE INDEX tblresources_linktext_idx
  ON tblresources(linktext);
INSERT INTO tblresources
VALUES(1,'http://php.net','','','php.net','- the source',
  '','Software','','2005-10-20 17:27:07',1,'2005-10-20');
INSERT INTO tblresources
VALUES(2,'http://sqlite.org','','','SQLite','','','','',
  '2005-10-20 17:27:07',1,'2005-10-20');
INSERT INTO tblresources
VALUES(3,'http://phparchitect.com/','','','php|architect',
  '','','Miscellaneous','http://','2005-10-20 20:50:23',1,
  '2005-10-20');
INSERT INTO tblresources
VALUES(4,'http://www.phpkitchen.com/index.php','','',
  'phpkitchen','- come see what''s cooking','_blank','',
  'http://','2005-10-20 17:27:07',1,'2005-10-20');
CREATE VIEW alphabet AS 
    SELECT DISTINCT UPPER(SUBSTR(linktext,1,1)) AS letter 
    FROM tblresources 
    WHERE reviewed = 1 ORDER BY letter;
CREATE VIEW specific_link AS
    SELECT id, url,
    (precedingcopy || ' ' || linktext || ' '
      || followingcopy)
    AS copy
    FROM tblresources;
CREATE TRIGGER delete_link
INSTEAD OF DELETE ON specific_link
FOR EACH ROW
BEGIN
    DELETE FROM tblresources
    WHERE id = old.id;
END;
CREATE TRIGGER insert_resources
AFTER INSERT ON tblresources
BEGIN
    UPDATE tblresources
    SET whenaltered = DATETIME('NOW','LOCALTIME')
    WHERE id = new.id;
END;
CREATE TRIGGER update_resources
AFTER UPDATE ON tblresources
BEGIN
    UPDATE tblresources
    SET whenaltered = DATETIME('NOW','LOCALTIME')
    WHERE id = new.id;
END;
CREATE TRIGGER add_date AFTER INSERT ON tblresources
BEGIN
    UPDATE tblresources
    SET whenadded = DATE('NOW','LOCALTIME')
    WHERE id = new.id;
END;
COMMIT;

   ここではデータベースのダンプがトランザクションとして記述されています。これを文字列としてqueryExec()メソッドに渡せばダンプデータを取得できるので、データベースをいつでも作成できるようになります。マルチプルクエリを実行するこの機能はセキュリティ上の問題を発生させてしまいます。

   もしこのメソッドを使用するのであれば、SQLインジェクションの攻撃に特に注意しなければなりません。

前のページ  1  2


Peter Lavin
著者プロフィール
Peter Lavin
カナダ、トロントでWebデザイナ/Web開発者として働いています。現在、PHPのオブジェクト指向をテーマにした本を執筆しており、No Starch Press社より出版される予定です。


INDEX
第4回:SQLiteDatabaseの拡張のメソッドの紹介
  query()メソッド
singleQuery()メソッド