Php 获取sql查询的开始/结束时间
我正在使用PHP将CSV解析为MySQL表Php 获取sql查询的开始/结束时间,php,mysql,csv,Php,Mysql,Csv,我正在使用PHP将CSV解析为MySQL表 我的表“File”中有时间戳列,称为“StartTime”(文件解析的开始)、“EndTime”(文件解析的结束)和“CreationDate”(行创建的时间)。现在有什么办法可以得到这些时间?现在()是一个好的解决方案吗 我还有一个名为“Rows with errors”的列,它是其中有错误的行数,因此不会解析。如何检索CSV文件中出现错误的行数?(有错误的行可能是类型错误的行,例如:[varchar,int,timestamp,timestamp,
function parse($file) {
$file_handle = fopen($file, "r"); //opens CSV
while (($row = fgetcsv($file_handle, 1000, ",")) !== false){
$file_name = basename($file);
$Rows_with_errors = ?;
$StartDate= date("Y-m-d H:i:s", time() ); //?
$EndDate=?;
$CreationDate=?;
$sql = "INSERT INTO file (Filename, TotalNumberOfRows, RowsWithErrors, StartDate, EndDate, CreationDate)
VALUES('$file_name','$Total_nr_of_Rows', '$Rows_with_errors', '$StartDate', '$EndDate', '$CreationDate')";
global $conn;
$conn->query($sql); //executes the query
}
if ($sql)
{
echo 'Data uploaded to database!';
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
函数解析($file){
$file_handle=fopen($file,“r”);//打开CSV
while(($row=fgetcsv($file_handle,1000,“,”))!==false){
$file\u name=basename($file);
$Rows_,带_错误=?;
$StartDate=日期(“Y-m-d H:i:s”,time());/?
$EndDate=?;
$CreationDate=?;
$sql=“插入文件(文件名、TotalNumberOfRows、RowsWithErrors、StartDate、EndDate、CreationDate)
值(“$file_name”、“$Total_nr_of_Rows”、“$Rows_with_errors”、“$StartDate”、“$EndDate”、“$CreationDate”);
全球$conn;
$conn->query($sql);//执行查询
}
如果($sql)
{
echo“数据上传到数据库!”;
}
否则{
echo“Error:”.$sql.“
”$conn->Error;
}
}
我从未运行过这个,希望它能起作用。解释在代码中
<?php
function parse($file) {
//Initialize some variables here. Probably in some constants etc.
$dateRegex = '|^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$|'; //Just a rough check. I purposely skip the case of like 9999-99-99 99:99:99. Up to you to refine this.
$dateFormat = 'Y-m-d H:i:s';
//In fact checking the file exist or not is probably useful too:
//if (is_file($file)) ...
//Opens CSV in read mode
$file_handle = fopen($file, "r");
//We don't need to put this in the loop since it's a one time job
$file_name = basename($file);
//We also initialize the variable outside the while loop so that we can increment it
$Rows_with_errors = 0;
$Total_nr_of_Rows = 0;
//StartDate of the parsing, shouldn't it be outside of the while loop too?
//Also, using "date" will gives you the time in the timezone that you set in your php.ini's date.timezone property.
//Using "gmdate" will gives you the time in GMT time.
$StartDate = date($dateFormat, time());
while (($row = fgetcsv($file_handle, 1000, ",")) !== false) {
++$Total_nr_of_Rows;
//So here, we are looping row by row. Do your checking here:
if (!(is_string($row[0]) &&
is_numeric($row[1]) &&
preg_match($dateRegex, $row[2]) &&
preg_match($dateRegex, $row[3]) &&
preg_match($dateRegex, $row[4]))) {
//Increment the error
++$Rows_with_errors;
}
}
//That's it. We insert it now
//Creation date & end date, probably the same, no? we initialize here:
$CreationDate = $EndDate = date($dateFormat, time());
//This is bad. There is no escaping, and YOU ARE RISK OF QUERY INJECTION FROM THE $file_name VARIABLE.
//I won't discuss it here since this is not the scope of the question.
$sql = "INSERT INTO file (Filename, TotalNumberOfRows, RowsWithErrors, StartDate, EndDate, CreationDate)
VALUES('$file_name','$Total_nr_of_Rows', '$Rows_with_errors', '$StartDate', '$EndDate', '$CreationDate')";
global $conn;
$conn->query($sql); //executes the query
if ($sql){
echo 'Data uploaded to database!';
}else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}