开发者

PHP MYSQL unserialize() issues

开发者 https://www.devze.com 2023-03-22 15:19 出处:网络
I have a \"recruiter\" table in my database which has different attributes and one of them is \"Professions\". \"Professions\" is a serialized array which I get from a multiple select form. And this w

I have a "recruiter" table in my database which has different attributes and one of them is "Professions". "Professions" is a serialized array which I get from a multiple select form. And this works fine.

When I unserialize this attribute nothing is printed - no error, no text.

This is a code I was testing serialization with:

$sql = 'SELECT Company_name, Status, Size, Professions, Seniority_levels, Sector, Website, Location FROM Recruiter';
$query = mysql_query($sql, $con);
while($result = mysql_fetch_array($query, MYSQL_BOTH)){
    $recruiters[] = array($result[0], $result[1], $result[2], $result[3], $result[4], $result[5], $result[6], $result[7]);
}

foreach($recruiters AS $recruiter){
    $test = unserialize($recruiter[3]);
    echo $tes开发者_Go百科t[0].'<br>';
}

So basically $test[0] prints nothing although the new lines are printed. Please help!


try printing the $test array and the $recruiters and the $recruiter arrays. See if the result is fine before the unserialisation of the data. If the query returns any data. Also try the while loop with mysql_fetch_assoc. Let me know of the results and if this solves the problem


test = unserialize($recruiter[3]); should become test = unserialize($recruiter[5]); since the sector field is the sixth column .

However what if somewhere in the future you might need to select rows where sectors equal smth ? serialize whont help you then so i suggest you have a look at a different implementation for the sector filed witch is called bitwize http://www.litfuel.net/tutorials/bitwise.htm


Edit

Asuming you hit the right column and the column contains a:1:{i:0;s:27: a:1:{i:0;s:27: a:38:{i:0;s:27: a:9:{i:0;s:39:, it looks like the serialized array is not fully saved in you're db, it's only part of it . So the unserialize function whont return you an array . Have a look at the length of the mysql field i assume you've set it smaller than you need so you're data is trimmed on insert/update .


Edit

a:1:{i:0;s:27: you're still missing the rest of the serialized array . s:27: means a string is following containint 27 characters, and you're serialized array stops there when it should look like a:1:{i:0;s:27:"123456789012345678901234567";}

( a:1 stands for an array containing 1 value with it's content between {}, i:0; is the array key 0, s:27:""; stands for a string containing 27 characters as the value for the i:0 key ) .

0

精彩评论

暂无评论...
验证码 换一张
取 消