1

Webからデータを取得するためのPHPスクリプトを作成しています。最終結果、私はすべてのスクレイピングされたデータをmysqlデータベースにうまく詰め込んでフォーマットしたいと思っています。

しかし、PHPスクリプト内で反復する複数のループと配列があるので、速度と効率のために、mysqlデータベースへのループサイクリングアクセスを維持しないことが最善であると私は感じています(各ゴーアラウンドにデータを挿入しますループ)-代わりに、PHP内の一時配列にデータを格納し、スクリプトの最後でのみ、配列をmysqlに一度にダンプします。

あなたがたは何と言いますか?

4

3 に答える 3

5

Insert into values( "1"、 "2"、 "3")、( "3"、 "5、" 5 ")を使用できます

foreachでは、値の配列を作成でき、forloopからは、内包してmysqlに挿入できます。

まあ言ってみれば、

$values = array();
foreach($yourData as $eachData){

// prepare your values here.
$values[] = "('1','2',3')";

}


// out of forloop,
$values = implode(",",$values); 

$query = " insert into `tablename` (field1,field2,field2) values {$values} " ;

乾杯

于 2012-05-12T03:24:47.403 に答える
2

はい、一般に、クエリの数に関しては最小限であることがパフォーマンスに優れています。ただし、スクリプトはデータベースではなく、ネットワーク io(ダウンロード速度) によって制限されます。OS がデータをダウンロードしている間、ほとんどの場合、スクリプトはスリープ状態になります。そのため、発行するクエリは比較的まれです。

私のアドバイスは、それを機能させることです。

于 2012-05-12T03:42:30.980 に答える
0

前述のように、1 つのクエリで複数の行を挿入できます。これは、行ごとに個別のクエリを使用するよりもはるかに最適化されています。ループを使用してクエリ文字列にさらに行を追加できますが、何よりも、データをエスケープすることを忘れないでください!

<?php    
$rows = array();
$sql = '
    INSERT INTO `table` (`key`, `data`)
    VALUES ';

$data = array(
    array(
        'key' => 'key1',
        'value' => 'some value'
    ),
    array(
        'key' => 'key2',
        'value' => 'some value 2'
    ),
    array(
        'key' => 'key3',
        'value' => 'some value 3'
    ),
);

for ($i = 0; $i < count($data); ++$i)
{
    // Do me a favor and look up PDO.
    $key = mysql_escape_string($data[$i]['key']);
    $row = mysql_escape_string($data[$i]['value']);

    if ($i === 0)
        $sql .= ' (\'' . $key . '\', \'' . $row . '\')';
    else
        $sql .= ', (\'' . $key . '\', \'' . $row . '\')';
}
于 2012-05-12T03:50:04.037 に答える