2012-07-13 26 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