2015-08-14 53 views
1

出于某种原因,这个代码是导致odbc_execute();试图打开一个文件...PHP ODBC执行所试图打开一个文件

$file = fopen('somefile.csv', 'r'); 
fgetcsv($file); // Skip the first line 
$data = []; 
while (($line = fgetcsv($file)) != false) { 
    $data[] = $line; 
} 
fclose($file); 

try { 
    $conn = odbc_connect("Teradata", "User", "Pass"); 
    odbc_autocommit($conn, false); 

    odbc_exec($conn, 'DELETE FROM table'); 

    foreach ($data as &$test) { 
     $stmt = odbc_prepare($conn, 'INSERT INTO table (experiment_code, experiment_name, variant_code, variant_name, version_number, report_start_date, report_end_date, status, transaction_date, experiment_test_id, test_manager, product_manager, pod, created_date, last_updated_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); 
     odbc_execute($stmt, $test); 
    } 

    odbc_commit($conn); 

    $result = odbc_exec($conn, 'SELECT * FROM table'); 
    odbc_result_all($result); 
} catch (Exception $e) { 
    odbc_rollback($conn); 
    echo $e->getMessage(); 
} 

这里是剪断,它的CSV文件...

H1225,Some random text,H1225:001.000,Control,3,02/06/2014,03/31/2014,Completed,,HMVT-1225,Some random name,Some random name,Checkout,03/31/2014 16:54,02/06/2014 16:38 
H1225,Some random text,H1225:001.000,Control,3,02/06/2014,03/31/2014,Completed,,HMVT-1225,Some random name,Some random name,Checkout,03/31/2014 16:54,02/06/2014 16:38 

这里是错误我得到的类型......

Warning: odbc_execute(): Can't open file Control in C:\wamp\www\HEXinput\assets\php\dumpCSV.php on line 19 

我得到同样的错误绝对的多个版本t用不同的文件名。文件名似乎来自第3列(基于0)。另一个奇怪的是,它实际上确实插入了一些行。

最后的错误我得到的是...

Fatal error: Maximum execution time of 120 seconds exceeded in C:\wamp\www\HEXinput\assets\php\dumpCSV.php on line 27 

我使用Teradatas ODBC驱动程序在Windows 15版本7 64位。

这可能是什么原因造成的?

+0

你确定这是正确的形成csv? “一些随机文本”看起来并不乐观。如果包含任何',',你会抛出数组,因为csv分析器发现“更多”字段比真正应该。 –

+0

我相信这是..我怎么能仔细检查? – ChristopherStrydom

+0

'echo count($ line)'看看所有的行是否有相同的计数。任何错误的解析几乎肯定会抛弃。 –

回答

0

原来,CSV文件中的一些字段中有单引号,导致查询中断。

简单但烦人的疏忽。