如何解决使用PHP将分隔的值文件导入数据库时,如何删除或避免插入列标题?
您有两种解决方案:
- 您不能使用.dat文件 的第一行
- 我想你正在逐行阅读…
- 我是这样,只是不要使用第一行(您可以使用变量作为计数器来知道您是否在第一行)
- 或者,您可以在将数据插入数据库之前测试当前行是否仅包含整数/数字。
如果选择第二种解决方案,那么这是一部分代码可以作为起点:
if (in_numeric($data[0]) && is_numeric($data[1]) && is_numeric($data[2])) {
$sql_qry = "INSERT INTO DatTable (DF_PARTY_ID,DF_PARTY_CODE,DF_CONNECTION_ID)
VALUES ('$data[0]','$data[1]','$data[2]')";
$stmt = $this->connection->prepare($sql_qry);
$stmt->execute();
$this->checkForErrors($stmt);
}
另外,请注意,您正在使用prepare和execute,这似乎表明您正在尝试使用准备好的语句。
当使用准备好的语句时,您不应该像做的那样做。你应该 :
- 一次只有一次:使用数据的占位符准备语句
- 对于每一行,绑定值
- 并执行语句
你不应该 :
- 准备每一行的声明
- 将数据注入到SQL查询中,而不使用占位符。 这意味着您的代码应该看起来像这样(未经测试,因此您可能需要更改一些内容):
// First, prepare the statement, using placeholders
$query = "INSERT INTO DatTable (DF_PARTY_ID,DF_PARTY_CODE,DF_CONNECTION_ID)
VALUES (:party_id, :party_code, :connection_id)";
$stmt = $this->connection->prepare($query);
if (in_numeric($data[0]) && is_numeric($data[1]) && is_numeric($data[2])) {
// Then, for each line : bind the parameters
$stmt->bindValue(':party_id', $data[0], PDO::PARAM_INT);
$stmt->bindValue(':party_code', $data[1], PDO::PARAM_INT);
$stmt->bindValue(':connection_id', $data[2], PDO::PARAM_INT);
// And execute the statement
$stmt->execute();
$this->checkForErrors($stmt);
}
解决方法
我有用分号分隔的.dat
文件,我想读取该文件并将其内容存储到数据库中。
.dat
文件结构:
PARTYID;PARTYCODE;CONNECTION
256;319;234
879;435;135
SQL导入.dat
文件:
$sql_qry = "INSERT INTO DatTable (PARTYID,PARTYCODE,CONNECTIONID)
VALUES ('$data[0]','$data[1]','$data[2]')";
$stmt = $this->connection->prepare($sql_qry);
$stmt->execute();
$this->checkForErrors($stmt);
现在,如果我运行脚本,则Db结构如下所示:
PARTYID PARTYCODE CONNECTION
------------------------------
1 PARTYID PARTYCODE CONNECTION
2 256 319 234
3 879 435 135
显然,我不需要表中的列标题(PARTYID PARTYCODE CONNECTION row)…那么如何删除它们呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。