2012-07-13 67 views
0

我寫一個PHP腳本創建序列排列如下:追加序列化陣列中的數據用PHP

$x=Array(); 
    $x[0]=$_GET['fname']; 
    $x[1]=$_GET['lname']; 
    $str=serialize($x); 
    print $str; 
    $y=$_GET['hf']; 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("formdemo", $con); 
    $sql="update rohit set data='$str' where fid='$y'"; 

現在我要追加在這個陣列上更多的數據。我應該怎麼做

Thanx

+0

重複:http://stackoverflow.com/questions/1658616/php-how-can-i-append-data-into-a-serialized-array?rq=1 – matzahboy 2012-07-13 06:26:37

+0

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。查看[*紅色框*](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 – Dan 2012-07-13 06:35:15

回答

0

首先,您不會將數據轉義傳遞給您的腳本。你必須做到這一點的:

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

你也不必設置索引,所以:

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

將數據追加到數組的末尾。

如果你想新數據添加到現有的序列化數組,你需要反序列化,添加數據,並再次連載:

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

「*首先*」應該讀取,「*首先,不要使用'mysql_ *'函數*」;) – Dan 2012-07-13 06:30:35

+0

你不會拯救世界。我不做操作應用程序重構,只是突出顯示SQL注入問題。 – hsz 2012-07-13 06:32:53

1

您必須反序列化數組添加值並再次序列化。

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

拉出DB的,反序列化,添加數據,序列化它,然後再次更新:

$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的錯誤 – 2012-07-13 07:16:01

+0

和,你是否迴應$ x並看看它是什麼?你有數據庫中的數據嗎?爲了簡潔起見,我跳過了錯誤檢查代碼。每個結果訪問方法應該只用於檢查返回的行。看到這裏:http://us.php.net/manual/en/class.mysqli-stmt.php – 2012-07-13 07:21:52

+0

當我使用print_r然後它正在返回數組,但是當我再次更新表,然後它返回錯誤unserialize()[function.unserialize]:在1字節的偏移量爲0的錯誤 – 2012-07-13 07:24:09