程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php把數組保存數據庫程序代碼

php把數組保存數據庫程序代碼

編輯:關於PHP編程

我們在做緩存文件時經常會要把php代碼或數組轉換成字符串保存到數據庫中,下面我來介紹兩種把數組保存到數據庫的方法。

方法一:

用serialize寫入,再用unserialize輸出

serialize()就是將PHP中的變量如對象(object),數組(array)等等的值序列化為字符串後存儲起來.序列化的字符串我們可以 存儲在其他地方如數據庫、Session、Cookie等,序列化的操作並不會丟失這些值的類型和結構。這樣這些變量的數據就可以在PHP頁面、甚至是不 同PHP程序間傳遞了。
而unserialize()就是把序列化的字符串轉換回PHP的值。返回的是轉換之後的值,可為 integer、float、string、array 或 object如果傳遞的字符串不可解序列化,則返回 FALSE

 代碼如下 復制代碼

class db {
 private $host;
 private $user;
 private $pwd;
 private $dbname;
 private $Mysqli;
 function __construct($host, $user, $pwd, $dbname) {
  $this->host = $host;
  $this->user = $user;
  $this->pwd = $pwd;
  $this->dbname = $dbname;
  $this->db();
 }
 function db() {
  $this->mysqli = new mysqli ( $this->host, $this->user, $this->pwd, $this->dbname );
 }
 function select() {
  $this->mysqli->query("SET CHARSET GBK");
  $sql = "SELECT id,cname FROM hdw_channel";
  $result = $this->mysqli
   ->query ( $sql );
  $rows = array ();
  while ( $row = $result->fetch_assoc () ) {
   $rows [] = $row;
  }
  ECHO "<PRE>";
  print_r ( $rows );
 }
 function __wakeup(){   //反序列化,
  $this->db();
 }
}
$chanel = new db("localhost",'root','','hdcms');
//$chanel->select();
session_start();
$_SESSION['channel_obj'] = serialize($chanel);   //將對象序列化,保存的是對象的屬性,沒有方法,所以要用__wakeup()


class ren{
 private $name;
 private $age;
 function __construct($name,$age){
  $this->name =$name;
  $this->age = $age;
 }
 function show(){
  echo "姓名是:{$this->name}  年齡是:{$this->age}";
 }
 function __sleep(){
  return array_keys(get_object_vars($this));  //或得數組裡邊的鍵名,序列化某些變量
 }
}
$zao = new ren("趙六",44);
echo serialize($zao);       //序列化(指定哪個變量序列化)

====================================
 
session_start();
include '59.php';
$channel_obj=unserialize($_SESSION['channel_obj']);  //反序列化類對象
$channel_obj->select();  //有了__wakeup方法才可以起作用

方法二:

用json_encode寫入,再用json_decode輸出

json_encode之前,把所有數組內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字符串,最後再用urldecode()將編碼過的中文轉回來。

 代碼如下 復制代碼

<?php
/**************************************************************
 *
 * 使用特定function對數組中所有元素做處理
 * @param string &$array  要處理的字符串
 * @param string $function 要執行的函數
 * @return boolean $apply_to_keys_also  是否也應用到key上
 * @access public
 *
 *************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
 
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
 
/**************************************************************
 *
 * 將數組轉換為JSON字符串(兼容中文)
 * @param array $array  要轉換的數組
 * @return string  轉換得到的json字符串
 * @access public
 *
 *************************************************************/
function JSON($array) {
 arrayRecursive($array, 'urlencode', true);
 $json = json_encode($array);
 return urldecode($json);
}

$array = array
       (
          'Name'=>'希亞',
          'Age'=>20
       );


echo JSON($array);
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved