0

MySQLで一時データベースを作成したい。行のコンテンツは、PHPQueryを使用して解析する外部ページから取得されます。forループ実行の回数もそのページから取得され、ページに要素が存在する回数を実行します。

次のコードはほとんど機能しません。私はそれが実行されるたびに1ずつ増加する$number時間のコードを実行すると仮定しました。$iこのようにして、、、などをデータベースに挿入$new[0]$new[1]ます$new[2]。問題は、最後のインスタンスのみを挿入することです。

11と言う$numberと、データベースにのみ挿入$new[11]されます。

$server = "localhost";
$username = "***";
$password = "***";
$database = "***";
$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

$number = pq('.trafficbriefs:contains(\'SCHOOLS\')') -> parent() -> find('.maintext') -> length();
for ($i = 0; $i < $number; $i++) {
    $test = pq('.trafficbriefs:contains(\'SCHOOLS\')') -> parent() -> find('.maintext') -> eq($i) -> text();
    $new[$i] = $test;
    $sql = "INSERT INTO Temp (School) ";
    $sql .= "VALUES ('$new[$i]')";
}

if (!mysql_query($sql, $con)) {
        die('Error: ' . mysql_error());
    } else {
        echo "Added to database.";
    }

mysql_close($con);
4

3 に答える 3

2

また、mysql_queryそのループ内にある必要があります。

于 2012-10-25T22:02:12.780 に答える
1

それが必要かどうかはわかりませんが、このコードは最初にクエリを作成し、次にそれを 1 回実行します。このクエリは、挿入したいすべてのものを一度に挿入します。$numberが大きい場合、これははるかに高速になります。

$server = "localhost";
$username = "***";
$password = "***";
$database = "***";
$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);

$number = pq('.trafficbriefs:contains(\'SCHOOLS\')')->parent()->find('.maintext')->length();
$queryParts = array();
for ($i = 0; $i < $number; $i++) {
    $test = pq('.trafficbriefs:contains(\'SCHOOLS\')')->parent()->find('.maintext')->eq($i)->text();
    $queryParts[] = '("' . $test . '")';
}
if (empty($queryParts)) {
    throw new Exception('Nothing to insert');
}
$query = 'INSERT INTO Temp (School) VALUES ' . implode(', ', $queryParts);
if (!mysql_query($query, $con)) {
    die('Error: ' . mysql_error());
} else {
    echo "Added to database.";
}
mysql_close($con);
于 2012-10-25T22:09:53.027 に答える
0

これを試して:

$sql = "";
for ($i = 0; $i < $number; $i++) 
{
    $test = pq('.trafficbriefs:contains(\'SCHOOLS\')') -> parent() -> find('.maintext') -> eq($i) -> text();
    $new[$i] = $test;
    $sql .= "INSERT INTO Temp (School) ";
    $sql .= "VALUES ('$new[$i]');";
}

各ステートメントを連結し、セミコロンで区切ります

于 2012-10-25T22:10:03.033 に答える