PHP는
답변
우선 스크립트에 전달 된 데이터를 이스케이프 처리하지 않습니다. 그래서,
$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);
을 위해 무엇을해야하는지 당신은 직렬화를 배열 값을 추가하고 다시 직렬화해야합니다.
function add($serializedArray, $item)
{
$array = unserialize($serializedArray);
$array[] = $item;
return serialize($array);
}
당겨 그것을 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();
나는 모든 방법을 적용했으나 같은 문제가 생겼다 unserialize() [function.unserialize] : 1 바이트의 오프셋 0에서 오류 –
그리고 $ x을 되풀이하여 그 내용을 확인 했습니까? DB에 데이터가 있습니까? 간결함을 위해 오류 검사 코드를 생략했습니다. 각 결과 액세스 메소드는 리턴 된 행에 대한 점검 내에서만 사용되어야합니다. 여기를 참조하십시오 : http://us.php.net/manual/en/class.mysqli-stmt.php –
print_r을 사용할 때 배열을 반환하지만 테이블을 다시 업데이트하면 오류가 반환됩니다. unserialize() [function.unserialize] : 1 바이트 오프셋 0시 오류 –
중복 : http://stackoverflow.com/questions/1658616/php-how-can-i-append-data-into-a-serialized-array?rq=1 – matzahboy
새 코드를 작성하기 위해'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