2016-09-07 1 views
0

다른 db 파일에서 테이블을 복사하고 싶지만 실패하고 그 이유를 알 수 없습니다. 이것은 내 코드입니다.php sqlite - 다른 데이터베이스에 테이블 복사

$db = new SQLite3($_SERVER['DOCUMENT_ROOT']."/db/098765.db"); 
$sql = "ATTACH DATABASE 'admin.db' AS admin ; 
     INSERT INTO 'table-1' SELECT * FROM 'admin.table-1';"; 
$db->query($sql); 

이 사이트의 모든 항목을 읽었지만 답변이 도움이되지 않았습니다.

어택 데이터베이스에 대한 전체 경로 부여가 작동하지 않습니다. 데이터를 삽입하기 전에 표를 작성해도 작동하지 않습니다.

+0

'php'를 통해 절대적으로해야합니까? – redneb

+0

가급적이면 모든 솔루션을 사용할 수 있습니다. – Doe

답변

0
  1. INSERT 문에 데이터베이스 개체 식별자 (테이블/열 이름 등)를 올바르게 인용하십시오. 문자열 리터럴 용 단일 문자 대신 double quotes을 사용하십시오. 가능한 경우 오브젝트 이름에 대시 또는 기타 제한된 문자를 사용하지 않는 것이 좋습니다 (영숫자와 밑줄 붙임).

  2. 대신 사용 query()

$dbPath = $_SERVER['DOCUMENT_ROOT']; 
$adminDbPath = $dbPath; // Or something else 

$db = new SQLite3("$dbPath/db/098765.db"); 
$db->exec("ATTACH DATABASE '$adminDbPath/admin.db' AS admin"); 
$db->exec('INSERT INTO "table-1" SELECT * FROM admin."table-1"'); 
    ^^^^   ^ ^     ^ ^
+0

경고 : SQLite3 :: exec() : 해당 테이블이 없습니다. table-1 – Doe

+0

테이블 이름' "table-1"'을 올바르게 인용하면이 경고 메시지가 표시되지 않습니다. – peterm

+0

쓴대로 모든 것을했습니다. – Doe

1

사소한이 작업을하게 편리한 명령 .dump라고 한 sqlite3 명령 줄 도구의 exec() :이 테이블을 생성합니다

sqlite3 admin.db '.dump "table-1"' | sqlite3 098765.db 

을, 모든 관련 색인 및 물론 그것은 모든 데이터를 복사합니다.

편집 : 분명히

./copy-table.sh 'admin.db' '098765.db' 'table-1' 

을 다음과 같이

#!/bin/bash 
$src_db="$1" 
$dst_db="$2" 
$table="$3" 

sqlite3 "$src_db" ".dump \"$table\"" | sqlite3 "$dst_db" 

그런 다음 스크립트를 실행할 수 있습니다보다 일반적인 솔루션의 경우, 쉘 스크립트를 만들려면 다음과 같이 (의이 copy-table.sh를 호출하자) , 당신은 원하는 스크립트를 실행할 수 있습니다. cron 또는 php에서.

+0

자동으로 실행하려면이 스크립트가 필요합니다. 명령 줄 도구로 가능합니까? – Doe

+0

예. 항상 같은 테이블입니까, 즉'table-1'과 같은 데이터베이스입니까? – redneb

+0

아니요, 다릅니다. – Doe

관련 문제