2013-02-19 3 views
2

그래서 간단한 HTML DOM Parser 클래스를 사용하여 웹 페이지에서 일반 텍스트 데이터 문자열을 긁어내는 변수 배열을 만들었습니다. 이 변수는보다 간결하고 유용한 형식으로되어 있습니다.PHP 변수 배열을 MySQL 데이터베이스로 보내려면 어떻게해야합니까?

이제이 데이터를 테이블 이름이 웹 페이지 제목 (별도로 스크랩 된)이고 데이터 입력이 배열이고 웹 페이지에서 추출 된 각 단어가 별도의 데이터 레코드 인 MySQL 테이블로 내보내려고합니다. 여기

는 (손질 $는 사용자가 입력 한 웹 페이지에서 긁어 데이터의 포맷 변수 문자열) 내 코드입니다 :
잘못된 쿼리 : 당신은이

$trimmed->plaintext=trim($trimmed->plaintext); 
$array = (explode(" ", $trimmed->plaintext)); 
$printarray = print_r ($array); 

mysql_select_db("test", $connect) or die ('Could not find database.'); 
$sql = "CREATE TABLE '$title'"; 

$myquery = sprintf("INSERT INTO WebPage '%s' 
    VALUES '%s'", 
    mysql_real_escape_string($title->plaintext), 
    mysql_real_escape_string($printarray)); 
$result = mysql_query($myquery); 

if (!$result) { 
    $message = '<br /><br /><br /> Invalid query: ' . mysql_error() . "\n"; 
    $message .= '<br /><br /> Whole query entered here: ' . $myquery; 
    die($message); 
} 

오류가를 받게되며입니다이게하려고 할 때 SQL 구문의 오류. 'Example Domain'근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 1 행의 VALUES '1'

여기에 전체 쿼리를 입력하십시오. INSERT INTO WebPage 'Example Domain'VALUES '1'

필자는 필요한 경우 더 많은 코드를 제공 할 수 있습니다. 나는 이것에 아주 새롭다.

미리 감사드립니다.

+0

'웹 페이지'테이블 구조를 제공해 주실 수 있습니까? –

+2

참고로 표준 PHP mysql_ functions이 이제는 더 이상 사용되지 않으므로 PDO 또는 mysqli로 전환해야합니다. – RayViljoen

+0

'예제 도메인'이란 무엇입니까? – Shoe

답변

1

귀하의 SQL :

INSERT INTO WebPage 'Example Domain' VALUES '1' 

가 유효하지 않습니다. 어쩌면 당신은 의미 : 보조 노트에

INSERT INTO `WebPage` ('Example Domain') VALUES ('1') 

, Example Domain 실제로 열 이름 인 경우 : 당신이 정말로 필드의 이름에 공백을 피해야한다.

0

여기에는 많은 오류가 있습니다.

먼저, 당신은 삽입을 위해 생성하고있는 SQL이 잘못 같습니다

INSERT INTO tableName (fields) VALUES (values) 

귀하의 코드는 말합니다 :

INSERT INTO WebPage 'plainText' VALUES (array) 

당신은 같은 이름의 테이블을 만들려면 당신은 웹 페이지를 제거해야 웹 페이지 제목. 게다가 그것은 한 단어 여야합니다 (공백을 '_'와 같은 것으로 대체하십시오).

둘째, 테이블을 만들어야합니다. 삽입을하기 전에 적절한 CREATE TABLE 구조가 필요합니다.

셋째, 필드 (열) 당 값을 삽입하는 데 echo print_r이 작동하지 않습니다. 배열을 반복하고 각 키에 대해 값을 삽입해야합니다. 그러나 이미 테이블 열을 만들려면이 작업을 수행해야합니다.

0

쿼리에 print_r의 출력을 통합하려는 것처럼 보입니다. print_r은 배열의 데이터를 페이지로 출력하는 함수이므로 불가능합니다.

배열의 내용을 데이터베이스에 저장하려면 json_encode을 사용하여 배열을 문자열로 변환 할 수 있습니다. 그런 다음 그것을 검색 할 때 json_decode를 사용하여 PHP 배열로 다시 변경하십시오.

예.

$myquery = sprintf("INSERT INTO `WebPage` ('%s') 
VALUES ('%s')", 
json_encode($title->plaintext), 
json_encode($array)); //not $printarray as that is not an actual array 

편집 : 다른 사람이 언급했듯이, mysql_real_escape_string 그래서 다른 방법이 문자를 이스케이프하는 데 사용해야합니다 사용되지 않는 기능입니다.

edit2 : serializejson_encode 대신 사용할 수 있지만 상대적인 장단점은 확실하지 않습니다. 더 이상적인 방법은 배열의 모든 내용을 별도의 데이터 조각으로 수용하기 위해 데이터베이스 테이블을 재구성하는 것이지만 때때로 실용적이지는 않습니다.

관련 문제