PHP行插入与Mysql相反的顺序


PHP rows inserting in reverse order to Mysql

我被难住了;我猜这很简单…?

我正在插入从PHPExcel收集的数据(虽然这可能并不重要)。在我的测试箱(Windows WAMP服务器)上,这工作得很好。当我在linux服务器上运行生产时,数据从下到上进入数据库。我的第一行是标题(姓名,电子邮件,地址等)。这在SQL中最后结束。当然,我可以反转输出,但我更想知道我做错了什么,特别是当我不确定它是100%可预测的。

我已经在循环内尝试了prep stmt -没有区别。

帮忙吗?

// Prep ahead of loop to save cpu time
$insert_stmt = $dbc->prepare
("INSERT INTO contacts (id, name, dept, u1, u2) VALUES (0, ?, ?, ?, ?)");
for ($row = $chosenRow; $row < sizeof($temp) +1; $row++){
    // To allow dynamic # of cols, must always check to see if data is available
    $u1 = array_key_exists(1, $temp[$row])?$temp[$row][1]:"";
    $u2 = array_key_exists(2, $temp[$row])?$temp[$row][2]:"";

    $insert_stmt->bind_param('siss', $temp[$row][0], $importToDept,$u1,$u2);
    // PRINTING OF THIS PARAM ROW HERE SHOWS PROPER ORDER
    // Execute the prepared query.
    if (! $insert_stmt->execute() ) {
        doError();
        exit();
    }
}

联系人创建表(但是,通过PHPAdmin查看数据库显示数据库中的行是反向的,因此创建时可能没有问题):

$items = $dbc->query("SELECT * FROM contacts WHERE dept = $dept_id");
    echo "<table style='border-collapse:collapse; border:0px; margin-top:25px;'>";
    $row = 0;
    foreach ($items as $v){
        if ($limit > 0 && $row > $limit)
            break;
        echo "<tr>";
        foreach ($v as $key=>$col){
            if ($key == "id" || $key == "dept")
                continue;
            if ($row == 0)
                echo "<th>$col</th>";
            else 
                echo "<td>$col</td>";
        }
        echo "</tr>";
        $row++;
    }
    echo "</table>";

好的,在MYSQL手册中进行了一些搜索,为我指明了正确的方向。这种类型的插入&我从来没有像这样依赖过查询,所以我没有意识到我做错了什么。

对于将来可能在假设中犯同样错误的人,问题是:

我假设(正确地我相信),数据进入数据库,FIFO。换句话说,它们不是反向进入数据库。我把注意力集中在输入上,而我本应该考虑查询是如何把它拉出来的。@Evan de la Cruz问create声明是对的,让我朝着正确的方向寻找。

问题在于查询的排序顺序。SQL不保证返回的排序顺序。它给出最快/最有效的东西。甚至在PHPMyadmin,它搞砸了我的bug查找

对我来说,答案是简单地对id进行排序,这是一个auto_increment字段。

HTH .