2010-01-11 4 views
2

PHP로 SQLite 데이터베이스에서 정보를 검색 할 수 있지만 쓸 수는 없습니다. 예를 들어,이 코드는 완벽하게 잘 작동 : 그러나PHP에서 SQLite 데이터베이스에서 SELECT를 사용할 수 있지만 INSERT를 사용할 수없는 이유는 무엇입니까?

$db = new PDO("sqlite:foo.db"); 
$rowCount = $db->query("SELECT COUNT(*) FROM tblname;")->fetchColumn(0); 
echo $rowCount; // works as it should 

,에서 다음 코드 결과, '데이터베이스 파일을 열 수 없습니다'오류 :

$db = new PDO("sqlite:foo.db"); 
$db->exec("INSERT INTO tblname VALUES(NULL, 'val1', 'val2');") or die(print_r($db->errorInfo(), true)); 

나는 명령에서 위의 INSERT를 수행 할 때

$ sqlite3 foo.db 
sqlite> INSERT INTO tblname VALUES(NULL, 'val1', 'val2'); 

이 (그 문제에 대한 또는 SQLite는) 처음 PDO를를 사용하는 시간이다 그래서 어떤 도움을 크게 apprecia 것 : 오히려 PHP보다 라인, 나는 예상되는 결과 (tblname에 새 행)를 얻을 테드.

+0

웹 서버 (Apache/PHP 또는 기타)에서 데이터베이스에 대한 쓰기 권한이 있습니까? –

답변

10

PHP 스크립트를 실행하는 사용자에게 foo.db를 쓸 권한이 있는지 확인하십시오.

또한 (메모리가 잘못되었을 경우 사용자가 나를 수정하십시오.) 사용자는 foo.db가 포함 된 디렉토리에 대한 쓰기 권한이 있어야합니다. 그렇지 않으면 SQLite3이 유용하지 않은 오류 메시지를 표시합니다.

+0

나는 그것이 존재하는 데이터베이스와 디렉토리가 모두 쓰기 가능하지만 아무것도 변경하지 않았 음을 확인했다. –

+0

코드에서 foo.db의 절대 경로를 사용하여 작업 디렉토리의 차이점을 배제하십시오. – oops

+0

"PHP 스크립트를 실행하는 사용자를 확인하십시오 ..."그게 문제였습니다. 내 일반 사용자는 실제로 스크립트를 실행하는 사용자가 아니라 쓰기 권한이있는 사용자입니다. 감사. –

2

당신은 분명히 sqllite 파일에 대한 쓰기 액세스 권한이 없습니다. PDO 양식을 사용하여 오류 메시지를 확인하십시오 PDO::errorInfo

관련 문제