-1

HTMLページのコンテンツリンクを解析して表示するphpスクリプトがありますが、このコンテンツをsqlite3データベースに保存する方法を知る必要がありますか?

include_once('simple_html_dom.php'); //PHP Simple HTML DOM Parser library  
$html = file_get_html('www.website.com');  

// Find all article blocks
foreach($html->find('div.postbody') as $article) {
 $item['details'] = $article->find('div.content', 0)->innertext;
 $articles[] = $item;
}
print_r($articles); 

try {

$db = new SQLite3('db/mysqlitedb.db');
$db->exec// what type of table should i create
$db->exec// how tell db to store html content from $articles
$result = $db->query('SELECT bar FROM gg');
var_dump($result->fetchArray());

    /* Close connections to Database */
    $db = NULL;
}

catch( PDOException $e ) 
{

    /* Print Error-Messages */
    echo $e->getMessage();
} 
4

1 に答える 1

1

通常、フラグメントごとのテーブルではなく、すべてのフラグメントを格納するためのテーブルを1つだけ作成します。したがって、そのテーブルで必要となる最小限のフィールドは、フラグメントとフラグメント自体を識別するためのものです。要件に基づいて、フラグメントが挿入された日時、インサーターのユーザーIDなどのフィールドを追加することもできます。

フラグメントはTEXT(テキスト情報を含むことができるラージオブジェクトデータ型)として格納されます。簡単にするために、INTEGERフィールドを識別子として使用します。フラグメントを取得する方法に応じて、短い文字列を使用することもできます。VARCHAR

CREATE TABLE fragments(
    identifier INTEGER,  -- a unique identifier
    fragment TEXT        -- the fragment
);

次に、質問に含めたコードラインのコレクションで、PDO例外にラップされたネイティブSQLiteドライバーを使用しています。それが適切に機能するかどうかは非常に疑わしいです。PDOとプリペアドステートメントに固執することをお勧めします。特に、htmlフラグメントを挿入する場合は特に、石畳の文字通りのINSERTステートメントの使用を検討しないでください。または、その他の場合、準備されたステートメントは、SQLインジェクション攻撃および関連するいたずらに対する唯一の防水および防弾防御です。

// open the db.  as this is relatively costly it's typically done outside any loops 
// in the rest of the code
$dbh=new PDO('sqlite:./db/mysqlitedb.db') or die("failed to connect to db");

// let's assume $item contains the fragment and $identifier 
// was initialized with some key value in the mean time
try{
   $stmt = $dbh->prepare("INSERT INTO fragments (identifier, fragment) VALUES (?, ?)");
   $stmt->bindParam(1, $identifier);
   $stmt->bindParam(2, $item);
   $stmt->execute();
} catch(PDOException $e) {
   echo $e->getMessage();
}

これが基本的な設定です。これらのフラグメントの一意の数字キーを考えることはできませんか?VARCHAR問題ありません。テーブル定義で識別子のタイプをに変更してください。

于 2012-10-21T17:48:03.467 に答える