我很难过;我猜这很简单......?
我正在插入从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>";
答案 0 :(得分:2)
好的,有点搜索MYSQL手册指出了我正确的方向。这种类型的插入物和查询不是我曾经依赖的东西,所以我没有意识到我做错了什么。
对于未来可能在假设中犯同样错误的人来说,问题出在这里:
我假设(正确地说,我相信),数据进入DB,FIFO。换句话说,它们不会反过来进入DB。我专注于输入,当我应该考虑查询是如何将其拉出来的时候。 @Evan de la Cruz在询问创造声明时是正确的,并让我在正确的方向上狩猎。
问题出在查询的排序顺序上。 SQL不保证返回的排序顺序。它提供了最快/最有效的东西。即使在PHPMyadmin中,这也搞砸了我的bug。
对我来说,答案是简单地对id进行排序,这是一个auto_increment字段。
HTH。