我有用分号分隔的.dat文件,我想读取该文件并将其内容存储到数据库中。
.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)…那么如何删除它们呢?
您有两种解决方案:
如果选择第二种解决方案,那么这是一部分代码可以作为起点:
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,这似乎表明您正在尝试使用准备好的语句。
当使用准备好的语句时,您不应该像做的那样做。你应该 :
你不应该 :
// 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); }