2016-07-03 1 views
1

このプログラムでは、シリアル化された配列をMySQLテーブルから取り出し、その結果を1つ追加してから、その配列を再シリアル化して戻しますテーブル。ここに私のコードは次のとおりです。配列をシリアル化するときに最後の番号をシリアル化しません

for($i = 0; $i < $count; $i++){ 
     $query = "SELECT `assignment_assigned` FROM `users` WHERE isAdmin = 0 LIMIT 1"; 
     $result = mysqli_query($con, $query); 
     if($result === FALSE) { 
      echo "Failed".mysql_error(); 
     } else { 
      $unserializedVal = unserialize(implode(mysqli_fetch_array($result))); 
      $array = array_push($unserializedVal, $val); 
      $serializedVal = serialize($unserializedVal); 
} 
<h1><?php print_r($unserializedVal); ?></h1> 

私はこれを行うと、私は配列を取得し、うまくそれをアンシリアライズすることができますが、私はそれを再シリアライズしようとすると、これは現れる:

a:8:{i:0;i:2;i:1;i:3;i:2;i:4;i:3;i:5;i:4;i:6;i:5;i:7;i:6;i:8;i:7;s:2:"10";} 

オリジナルのシリアル化されました私はこのような最後の数字ルックスを追加する前に

a:7:{i:0;i:2;i:1;i:3;i:2;i:4;i:3;i:5;i:4;i:6;i:5;i:7;i:6;i:8;} 

配列:文字列は、このでした

ここ

Array ([0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 10) 

すべてのヘルプ:

そして最後に番号を付加した後?あなたが行うことはできませんので

+0

簡単なヒント:同じクエリ(動的ではない)を常に実行するので、 'for'の前に変数に結果を保存するだけです。あなたが毎回同じ結果を返すと思われる複数の選択肢を実行しているわけではありません... – FirstOne

+0

私は、mysqli_ *関数を実行していますが、エラーを表示するにはmysql_errorを使用してください。あなたが[** APIを混在させることはできません**](http://stackoverflow.com/questions/17498216/can-i-mix-mysql-apis-in-php) – FirstOne

答えて

1

追加した値が整数ではなく文字列であるため、シリアル化された配列にs:2:"10";が追加されています。

intval()を使用して文字列を整数に変換できます。エラーのために

$val = intval($val); 

intval()はDBデータ意志配列というエラーを修正するために0

編集を返しますチェック。

$originalSerializedVal = mysqli_fetch_array($result); 
$unserializedVal = unserialize($originalSerializedVal['0']); 
$val = intval($val); 
// add error handling here 
$array = array_push($unserializedVal, $val); 
$serializedVal = serialize($unserializedVal); 

注:他の人が指摘しているようにimplode()を削除しました。 mysqli_fetch_arrayのデータは配列ですが、選択したフィールドにのみ関心があります。 implodeは配列を文字列に変換しますが、不要です。

+0

問題は '$ val'が整数ではないようですが、' implode'を取り出すと 'array_push'が動作しないので、実際には' implode() 'が必要です。 – sahmed

0

implode()は、シリアライズされた文字列をなしません:

$unserializedVal = unserialize(implode(mysqli_fetch_array($result))); 

は、単純に使用します。

$unserializedVal = mysqli_fetch_array($result); 

私はあなたのコードは、今あなたがそれをするつもり何だろうということgaranteeすることはできません、これは明らかな誤りでした。

+0

問題は、警告:unserialize()は、パラメータ1が文字列であると仮定します。配列は – sahmed

+0

です。これは、あなたがTristanのアドバイスに従ったためです。間違っています。答えを慎重に読んでください。 –

+0

かなり正しい、更新された答え。 – Tristan

関連する問題