我被难住了;我猜这很简单…?
我正在插入从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 .