PHP行以相反的顺序插入到Mysql中

时间:2015-05-18 18:17:06

标签: php 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>";

1 个答案:

答案 0 :(得分:2)

好的,有点搜索MYSQL手册指出了我正确的方向。这种类型的插入物和查询不是我曾经依赖的东西,所以我没有意识到我做错了什么。

对于未来可能在假设中犯同样错误的人来说,问题出在这里:

我假设(正确地说,我相信),数据进入DB,FIFO。换句话说,它们不会反过来进入DB。我专注于输入,当我应该考虑查询是如何将其拉出来的时候。 @Evan de la Cruz在询问创造声明时是正确的,并让我在正确的方向上狩猎。

问题出在查询的排序顺序上。 SQL不保证返回的排序顺序。它提供了最快/最有效的东西。即使在PHPMyadmin中,这也搞砸了我的bug。

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

HTH。