php sql虽然很慢

时间:2013-03-16 12:00:56

标签: php performance

我有以下代码,除了在查询完成之前需要很长时间的事实之外,它应该为我工作吗?我怎样才能让它更快?有2条记录似乎需要1到2分钟。

$query2 = "SELECT COUNT(*) FROM preordertablet1"; 
$result = mysql_query($query2) or die(mysql_error()); 
$count = mysql_fetch_row($result); 
//$result=mysql_query($query) or die ("Gegevens niet kunnen ophalen uit preorder tabel. Foutmelding: ".mysql_error());
$c=0;
while ($c<=$count) 
    {
    $query="SELECT * FROM preordertablet1 WHERE ID = '$c'";
    $result=mysql_query($query) or die ("gegevens niet geladen uit de preordertabel, fout: ".mysql_error());
    while ($row=mysql_fetch_array($result)) 
        {
        $ID1=$ID1+1;
        $c++;
        $naam=$row['naam'];
        $Postcodehuisnummer=$row['Postcodehuisnummer'];
        $datum=$row['datum'];
        $dagen=$row['dagen'];
        $productid=$row['productid'];
        $subid=$row['subid'];
        //$ID2=$ID1;
        //gegevens in database plaatsen
        $result=mysql_query("INSERT INTO huur (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid) VALUES ('$ID1', '$ID2', '1', '$naam', '$postcodehuisnummer', '$huurdatum', '$aantaldagen', '$productid', '$subid')") or die ("Fout: ".mysql_error());
        echo 'preorder fiets toegevoegd met ID2: ', $ID2,'<br>';
        //$ID1=$ID1+1;
        }
    }

2 个答案:

答案 0 :(得分:0)

$result变量正在重复用于插入操作。然后在while循环中测试$result值。

 $result_insert = mysql_query("INSERT INTO huur etc etc")

答案 1 :(得分:0)

如果我们假设这是您正在运行的所有代码,那么第一个查询几乎没用,因为您想要解析所有行,无论多少行。所以你可以一起跳过前三行。

然后是$ c变量,除非你需要知道通过它解析了多少行也可以报废。

然后是第一个循环中的查询,“WHERE ID ='$ c'”部分很可能是导致您只获得一个插入行的原因。如果ID列是auto_increment主键,则第一个插入的行将具有至少为1的值,但是您执行的第一个检查是ID = 0,而不返回任何值。因此,具有两行的表的最后一次迭代将是ID为1,但是不能保证存在具有该ID的任何行,但是在您的情况下存在一个并且我猜测这是您正在看到的行你的结果。

我不会尝试建议第二个while循环的更正,而没有关于ID1和ID2等列的更多信息。也许您可以发布表定义(创建表结构)并进一步解释一下?

正如其他人所说,不要使用mysql_函数,这些函数可以随时随地从PHP中消失。

所有这一切当然都是基于对表的猜测,因为你没有发布表格布局或者你想要实现的目标。

为了让您稍微了解一下这里有一个更简单的代码片段,它不完整,但应该给您一个想法,read about PDO here

$pdo = new PDO(<insert your connection information here>);
$selectStmt = $pdo->query('SELECT * FROM preordertablet1');
$insertStmt = $pdo->prepare("INSERT INTO huur
    (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid)
  VALUES
    (:ID1, :ID2, '1', :naam, :postcode, :datum, :dagen, :productid, :subid)");
$ID1 = 0; // Or whatever starting value you're working from.

while ($row = $selectStmt->fetch(PDO::FETCH_ASSOC)) {
    $ID1++;
    $values = array("ID1" => $ID1, "ID2" => NULL, "naam" => $row['naam'], etc...
    $insertStmt->execute($values);
}