PHP는

2012-07-13 2 views
0

나는 다음과 같이 직렬화 된 배열을 생성하는 PHP 스크립트를 쓰고 있어요으로 직렬화 된 배열에 데이터를 추가합니다. 내가 그PHP는

고맙습니다

+0

중복 : http://stackoverflow.com/questions/1658616/php-how-can-i-append-data-into-a-serialized-array?rq=1 – matzahboy

+0

새 코드를 작성하기 위해'mysql_ *'함수를 사용하지 마십시오. 더 이상 유지 관리되지 않으며 커뮤니티가 [지원 중단 프로세스] (http://goo.gl/KJveJ)를 시작했습니다. [* 빨간색 상자 *] (http://goo.gl/GPmFd)를 참조하십시오. 대신 [prepared statements] (http://goo.gl/vn8zQ)에 대해 알아야하고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용해야합니다. mysqli). 어떤 것을 결정할 수 없다면 [이 기사] (http://goo.gl/3gqF9)가 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 가이드입니다] (http://goo.gl/vFWnC). – Dan

답변

0

우선 스크립트에 전달 된 데이터를 이스케이프 처리하지 않습니다. 그래서,

$x[0] = mysql_real_escape_string($_GET['fname']); 

는 또한 인덱스를 설정할 필요가 없습니다 : 당신은 그것을 할 필요가

$x[] = mysql_real_escape_string($_GET['fname']); 

그것은 배열의 끝에 데이터를 추가합니다.

기존 직렬화 된 배열에 새로운 데이터를 추가하려면

, 당신은 그것을를 unserialize 데이터를 추가하고 다시 직렬화해야합니다 데이터를 추가,

$x = unserialize($x); 
$x[] = 'something else'; 
$x = serialize($x); 
+0

"* 우선 *"은 "* mysql_ *'functions *";)을 사용하지 말아라. – Dan

+0

세상을 구원하지 않을 것이다. ops 앱 리팩터링을하지 않고 SQL 주입 문제를 강조합니다. – hsz

1

을 위해 무엇을해야하는지 당신은 직렬화를 배열 값을 추가하고 다시 직렬화해야합니다.

function add($serializedArray, $item) 
{ 
    $array = unserialize($serializedArray); 
    $array[] = $item; 
    return serialize($array); 
} 
0

당겨 그것을 DB에서 그것을를 unserialize, 직렬화 그 다음 다시 업데이트 :

$mysqli = new mysqli("localhost", "root", "", "formdemo"); 
$stmt = $mysqli->prepare("SELECT data FROM rohit WHERE fid = ?"); 
$stmt->bind_param('i', $_GET['hf']); 
$stmt->execute(); 
$stmt->bind_result($x); 
$stmt->fetch(); 
$stmt->close(); 

$x = unserialize($x['data']); 
$x[] = "new data"; 
$x = serialize($x); 

$stmt = $mysqli->prepare("update rohit set data=? where fid=?"); 
$stmt->bind_param('si', $x, $_GET['hf']); 
$stmt->execute(); 
+0

나는 모든 방법을 적용했으나 같은 문제가 생겼다 unserialize() [function.unserialize] : 1 바이트의 오프셋 0에서 오류 –

+0

그리고 $ x을 되풀이하여 그 내용을 확인 했습니까? DB에 데이터가 있습니까? 간결함을 위해 오류 검사 코드를 생략했습니다. 각 결과 액세스 메소드는 리턴 된 행에 대한 점검 내에서만 사용되어야합니다. 여기를 참조하십시오 : http://us.php.net/manual/en/class.mysqli-stmt.php –

+0

print_r을 사용할 때 배열을 반환하지만 테이블을 다시 업데이트하면 오류가 반환됩니다. unserialize() [function.unserialize] : 1 바이트 오프셋 0시 오류 –