0

DOM 解析後にすべてのタグ/href を含むデータベースにインポートしたい `foreach ループに行き詰まっています。これは私のループです:

foreach($html->find('a') as $element) 
{       
    $sql1="INSERT INTO page (site_id,url) VALUES (LAST_INSERT_ID(),'$element->href')";  
}

これはうまくいくものです:

$j=1;
foreach($html->find('a') as $element) 
{       
    echo $j++ . ') HREF: ' . $element->href . ' ' . '<br>';         
}

最後のループだけでなく、すべての href タグを最初のループに保存するにはどうすればよいですか?

4

2 に答える 2

0

$sql1ループして毎回リセットしているように見えますが、ループの後に最後のクエリを実行したと思います。実際に行うべきことはINSERT、ループ内に複合ステートメントを作成し、最後にそれを実行することです。ループ内で複数INSERTのsを実行することは悪い習慣であり、1つのクエリで複数の行を簡単に挿入できます。

何かのようなもの...

$values .= sprintf('(%s), ', $element->href);

もちろん、末尾のコンマを削除する必要があります。何かのようなもの...

$values = substr ($values, 0, strlen($values)-1);

その後...

$sql1="INSERT INTO page (url) VALUES ($values)";

また、なぜ使用する必要があるのか​​わかりませんLAST_INSERT_IDAUTOINCREMENTおそらく列を作成し、MySQLに作業を任せたいと思うでしょう。あなたが何をしようとしているのかを説明していただければ、LAST_INSERT_IDより良いアドバイスを提供することができます。

また、PDOまたはMySQLiのプリペアドステートメントのいずれかを使用する必要があることは言うまでもありません。PHPのMySQL関数は非推奨であり、安全ではなく、将来のバージョンで削除される予定です。

于 2013-01-11T16:43:30.720 に答える
0

どうですか:

$sql = array();
    foreach($html->find('a') as $element) 
{       
     $sql[] = "INSERT INTO page (site_id,url) VALUES (LAST_INSERT_ID(),'$element->href')"; 
}

と配列を使用してすべてのクエリを保存し、後で foreach ループを使用して実行できるようにするか、指定した foreach ループでデータベース ルックアップを直接実行します。

于 2013-01-11T16:44:45.333 に答える