2013-03-09 2 views
0

안녕하십니까. 여기에 .sql 파일을 읽고 각 쿼리를 배열 요소에 저장하는 코드가 있습니다. 내 .SQL 파일에서코드 플랫폼을 독립적으로 만들려고 - PHP에서 SQL 파일 읽기

$fileLines = file('alltables.sql'); 

$templine = ''; 
foreach ($fileLines as $line) 
{ 
    // Skip it if it's a comment 
    if (substr($line, 0, 2) == '--' || $line == '') 
    continue; 

    // Add this line to the current segment 
    $templine .= $line; 

    // If it has a semicolon at the end, it's the end of the query 
    if (substr(trim($line), -1, 1) == ';') 
{ 
    // Perform the query 
    $queries[] = $templine; 
    // Reset temp variable to empty 
    $templine = ''; 
} 
} 

// Here I further process $queries var 

그것은 윈도우 플랫폼에서 잘 작동하지만 난 그게 리눅스 서버에서 작동 또는 여부를 모르겠어요하지 그래서 당신이 원하는 INSERT, TABLE, DROP을 CREATE 같은 다양한 문이하시기 바랍니다있다 코드를보고 제가 다른 플랫폼에 대한 새로운 라인과 캐리지 리턴을 처리하기 위해 (\ t의 \ r에 \ 0 \ X0B)와 같은 코드 뭔가를 변경해야해야 알려 :

$tmp=str_replace("\r\n", "\n", $line); 
$tmp=str_replace("\r", "\n", $line); 

답변

0

이 할 안전하지 SQL 문에 \ r 또는 \ n이있을 수 있으므로 (예 : 많은 줄이있는 긴 텍스트).

그런 경우가 아니라고 확신하는 경우 str_replace() 대신 trim()을 사용하는 것이 좋습니다. 각 줄의 끝에서 모든 공백과 EOL을 제거합니다. 또한 만 같은 EOL ("\ r에 \ n을"과 "\ n을"모두)를 제거하기 위해 지정할 수 있습니다

<?php 

$tmp = trim($line); 

?> 

:

<?php 

$tmp = trim($line, "\r\n"); 

?> 
+0

흠, 당신이 바로 텍스트 데이터 형식 필드가 많은 테이블이 존재하고 있습니다. 정확히 어디에서 추천 코드를 작성해야하는지 알려주시겠습니까? 두 번째로 가장 중요한 것은 코드 플랫폼을 독립적으로 만드는 것에 대해 처음에 묻는 질문에 대해 무엇을 말하고 있는지입니다. – Sam

+0

내 코드가 str_replace() 행을 대체하기위한 것입니다. 그러나 텍스트 데이터 형식을 사용하면 내 코드가 문제를 전혀 해결하지 못합니다. –