2013-04-17 3 views
0

의이 varialble 사진에 이미지 파일을 읽어 보자왜 연관 배열을 분해하면 왜 이전에 저장된 그림이 변경됩니까?

$picture = addslashes(fread(fopen($image, "r"), filesize($image))); 

이 $ 사진은 당신이 쉽게 문제없이 데이터베이스 테이블에 삽입 할 수 있습니다.

$final["banner"] = $picture; 
$final["place"] = something... 
나중에

$ 최종 분해 및 데이터베이스로 얻어진 값을 삽입 할 수 있습니다 : 어떤 이유

*for example*: INSERT INTO $banners(banner) VALUES($picture); 

최종 연관 배열 $ 만들 수 있습니다

$fields = "";  $values = ""; 

    while (list($name, $value) = each($final)) 
    { 
     $fields .= "$name, "; 
     $values .= "'$value', "; 
    } 
    // Cut trailing commas 
    $values_fields = ereg_replace(", $", "", $values_fields); 
    $values = ereg_replace(", $", "", $values); 

    // Execute query 
    $query = "INSERT INTO banners($values_fields) VALUES($values)"; 
    $res = mysql_db_query($database, $query) or mysql_die();  

지금 MySQL이 경고를 "뭔가 틀린 "연속적인 $ 값을 $ picture와 함께 데이터베이스에 삽입 할 때. 왜?

+1

무엇이 정확한 오류 메시지입니까? –

답변

0

여기에 게시 한 코드가 정확히 실행하려고하면 $fields 변수에 필드 이름이 누적되어 있지만이 시점에있는 $values_fields에서 "후행 쉼표 잘라 내기"가 있음에 유의하십시오. $values_fields을 검색어에 넣으면 mysql 오류가 발생할 수 있습니다.

addslashes()입니까? 대신 mysql_real_escape_string()을 사용해보세요.

또한 이미지를 넣으려는 데이터베이스 열의 유형이 BLOB 또는 LONGBLOB인지 확인하십시오.

이 질문에 대한 답변은 Binary Data in MySQL과 관련이 있습니다.

+0

물론 $ fields. = "$ name,"; 대신; 은 $ values_fields. = "$ name,"이어야합니다. – user2279628

+0

나는 게시물의 $ fields를 잘못 입력했으나 실수로 스크립트에 넣었습니다. $ values_fields – user2279628

1

먼저 데이터를 파괴하지 마십시오. 직접 읽고 변수 청결을 유지 :

$picture = file_get_contents($image); 

다음, 삽입 데이터를 준비 :

$final["banner"] = mysqli_real_escape_string($picture); 
$final["place"] = $something; 

마지막 그것은 단지 하나 개의 레코드를 포함하기 때문에, 배열을 반복 할 필요가 없다. 값을 인용하지 않아서 오류가 발생합니다.

$fields = "`" . implode("`, `", array_keys($final)) . "`"; 
$values = "'" . implode("', '", array_values($final)) . "'"; 

$query = "INSERT INTO banners ({$fields}) VALUES ({$values})"; 
$result = mysqli_query($database, $query) or die(mysqli_error($database)); 

mysql_ * 함수가 더 이상 사용되지 않으므로 (여기서는 ereg_ * 함수) 여기에서 MySQLi를 사용하고 있습니다.

+0

하나의 레코드 만 포함하고 있기 때문에 배열을 반복 할 필요가 없습니다 ... – user2279628

+0

--- 그 사실을 설명해야합니다. 배열에는 여기에 제시되지 않은 다른 정보가 수집되므로 많은 레코드가 포함됩니다. 따라서 연관 배열입니다. 자세한 필드의 이름을 지정하여 문제를 해결할 수 있지만 좋은 방법은 일반화 된 이름을 $ values_fields 및 $ values로 사용하는 것입니다. (추가 정보 : 나는 PHP4.3.9를 사용한다.) – user2279628

+0

1. 다음에는이'$ final' 배열이 많은 배열이있다. 각자 똑같은 대우를 받아야합니다. – nibra

관련 문제