PHP函式庫(other)

thinkyoung發表於2015-08-31

PHP函式庫(other)

Session函式:
  • session_abort — Discard session array changes and finish session
session_abort() finishes session without saving data. Thus the original values in session data are kept.
返回值:沒有你返回值。

session_cache_expire() 返回 session.cache_expire 的設定值。

請求開始的時候,快取到期時間會被重置為 180,並且儲存在 session.cache_expire 配置項中。 因此,針對每個請求,需要在 session_start() 函式呼叫之前 呼叫 session_cache_expire() 來設定快取到期時間。引數:

new_cache_expire

如果給定 new_cache_expire ,就使用 new_cache_expire 的值設定當前快取到期時間。

Note: 僅在 session.cache_limiter 的設定值 不是 nocache 的時候, 才可以設定 new_cache_expire 引數。

返回值:返回 session.cache_expire 的當前設定值, 以分鐘為單位,預設值是 180 (分鐘)。

<?php
/* 設定快取限制為 “private” */
session_cache_limiter(`private`);
$cache_limiter = session_cache_limiter();
/* 設定快取過期時間為 30 分鐘 */
session_cache_expire(30);
$cache_expire = session_cache_expire();
/* 開始會話 */
session_start();
echo “The cache limiter is now set to $cache_limiter<br />”;
echo “The cached session pages expire after $cache_expire minutes”;
?>
session_cache_limiter() 返回當前快取限制器的名稱。引數:
cache_limiter    如果指定了 cache_limiter 引數, 將使用指定值作為快取限制器的值。
傳送的響應頭
public
Expires:(根據 session.cache_expire 的設定計算得出)
Cache-Control: public, max-age=(根據 session.cache_expire 的設定計算得出)
Last-Modified:(會話最後儲存時間)
private_no_expire
Cache-Control: private, max-age=(根據 session.cache_expire 的設定計算得出), pre-check=(根據 session.cache_expire 的設定計算得出)
Last-Modified: (會話最後儲存時間)
private
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=(根據 session.cache_expire 的設定計算得出), pre-check=(根據 session.cache_expire 的設定計算得出)
Last-Modified: (會話最後儲存時間)
nocache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

返回值:返回當前所用的快取限制器名稱。

<?php
/* 設定快取限制器為 `private` */
session_cache_limiter(`private`);
$cache_limiter = session_cache_limiter();
echo “The cache limiter is now set to $cache_limiter<br />”;
?>
session_decode() 對 $data 引數中的已經序列化的會話資料進行解碼, 並且使用解碼後的資料填充 $_SESSION 超級全域性變數。引數:
data

編碼後的資料

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

session_destroy() 銷燬當前會話中的全部資料, 但是不會重置當前會話所關聯的全域性變數, 也不會重置會話 cookie。 如果需要再次使用會話變數, 必須重新呼叫 session_start() 函式。

為了徹底銷燬會話,比如在使用者退出登入的時候,必須同時重置會話 ID。 如果是通過 cookie 方式傳送會話 ID 的,那麼同時也需要 呼叫 setcookie() 函式來 刪除客戶端的會話 cookie。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
// 初始化會話。
// 如果要使用會話,別忘了現在就呼叫:
session_start();
// 重置會話中的所有變數
$_SESSION = array();
// 如果要清理的更徹底,那麼同時刪除會話 cookie
// 注意:這樣不但銷燬了會話中的資料,還同時銷燬了會話本身
if (ini_get(“session.use_cookies”)) {
    $params = session_get_cookie_params();
    setcookie(session_name(), “, time() – 42000,
        $params[“path”], $params[“domain”],
        $params[“secure”], $params[“httponly”]
    );
}
// 最後,銷燬會話
session_destroy();
?>
session_encode() 返回一個序列化後的字串,包含被編碼的、儲存於 $_SESSION 超全域性變數中的當前會話資料。引數:
返回值:返回當前會話編碼後的內容。
獲取會話 cookie 的引數。
返回值:返回一個包含當前會話 cookie 資訊的陣列:
session_id() 可以用來獲取/設定 當前會話 ID。引數:
id

如果指定了 id 引數的值, 則使用指定值作為會話 ID。 必須在呼叫 session_start() 函式之前呼叫 session_id()函式。 不同的會話管理器對於會話 ID 中可以使用的字元有不同的限制。 例如檔案會話管理器僅允許會話 ID 中使用以下字元:a-z A-Z 0-9 , (逗號)和 – (減號)

Note: 如果使用 cookie 方式傳送會話 ID,並且指定了 id 引數, 在呼叫 session_start() 之後都會向客戶端傳送新的 cookie, 無論當前的會話 ID 和新指定的會話 ID 是否相同。

返回值:session_id() 返回當前會話ID。 如果當前沒有會話,則返回空字串(“”)。

檢查變數是否已經在會話中註冊。引數:
name

變數名稱。

返回值:session_is_registered() 返回 TRUE 則表示 name 變數已經在當前會話中註冊使用,否則返回 FALSE 。

session_module_name() 獲取或設定會話模組名稱。引數:
module

如果指定 module 引數,則使用 指定值作為會話模組。

返回值:返回當前所用的會話模組名稱。

session_name() 函式返回當前會話名稱。 如果指定 name 引數, session_name() 函式會更新會話名稱, 並返回 原來的 會話名稱。引數:
name

用在 cookie 或者 URL 中的會話名稱, 例如:PHPSESSID。 只能使用字母和數字作為會話名稱,建議儘可能的短一些, 並且是望文知意的名字(對於啟用了 cookie 警告的使用者來說,方便其判斷是否要允許此 cookie)。 如果指定了 name 引數, 那麼當前會話也會使用指定值作為名稱。

會話名稱至少需要一個字母,不能全部都使用數字, 否則,每次都會生成一個新的會話 ID。

返回值:返回當前會話名稱。

<?php
/* 設定會話名稱為 WebsiteID */
$previous_name = session_name(“WebsiteID”);
echo “The previous session name was $previous_name<br />”;
?>
session_regenerate_id() 在不修改當前會話中資料的前提下使用新的 ID 替換原有會話 ID。引數:
delete_old_session

是否刪除原 ID 所關聯的會話儲存檔案。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo “Old Session: $old_sessionid<br />”;
echo “New Session: $new_sessionid<br />”;
print_r($_SESSION);
?>
將 session_write_close() 函式註冊為關閉會話的函式。引數:
此函式沒有引數。
返回值:沒有返回值。
  • session_register — Register one or more global variables with the current session
<?php
// Use of session_register() is deprecated
$barney = “A big purple dinosaur.”;
session_register(“barney”);
// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION[“zim”] = “An invader from another planet.”;
// The old way was to use $HTTP_SESSION_VARS
$HTTP_SESSION_VARS[“spongebob”] = “He`s got square pants.”;
?>
  • session_reset — Re-initialize session array with original values
session_reset() reinitializes a session with original values stored in session storage. This function requires an active session and discards changes in $_SESSION.
沒有返回值
session_save_path() 返回當前會話的儲存路徑。引數:
path

指定會話資料儲存的路徑。 必須在呼叫 session_start() 函式之前呼叫 session_save_path() 函式。

Note:

在某些作業系統上,建議使用可以高效處理 大量小尺寸檔案的檔案系統上的路徑來儲存會話資料。 例如,在 Linux 平臺上,對於會話資料儲存的工作而言,reiserfs 檔案系統會比 ext2fs 檔案系統能夠提供更好的效能。

返回值:返回儲存會話資料的路徑。

Cookie 引數可以在 php.ini 檔案中定義,本函式僅在當前指令碼執行過程中有效。 因此,如果要通過函式修改 cookie 引數,需要對每個請求都要 在呼叫 session_start() 函式之前呼叫 session_set_cookie_params() 函式。

本函式會修改執行期 ini 設定值, 可以通過 ini_get() 函式獲取這些值。引數:

lifetime

Cookie 的 生命週期,以秒為單位。

path

此 cookie 的有效 路徑。 on the domain where 設定為“/”表示對於本域上所有的路徑此 cookie 都可用。

domain

Cookie 的作用 。 例如:“www.php.net”。 如果要讓 cookie 在所有的子域中都可用,此引數必須以點(.)開頭,例如:“.php.net”。

secure

設定為 TRUE 表示 cookie 僅在使用 安全 連結時可用。

httponly

設定為 TRUE 表示 PHP 傳送 cookie 的時候會使用 httponly 標記。

返回值:沒有返回值。

session_set_save_handler() 設定使用者自定義 會話儲存函式。 如果想使用 PHP 內建的會話儲存機制之外的方式, 可以使用本函式。 例如,可以自定義會話儲存函式來將會話資料儲存到資料庫。
返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

這裡使用了 session_set_save_handler() 函式的 OOP 原型 並且使用第二個引數來註冊 shutdown 函式。 當將物件註冊為會話儲存管理器時,建議使用這種方式。

<?php
class MySessionHandler implements SessionHandlerInterface{
    // 在這裡實現介面
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// 現在可以使用 $_SESSION 儲存以及獲取資料了
session_start() 會建立新會話或者重用現有會話。 如果通過 GET 或者 POST 方式,或者使用 cookie 提交了會話 ID, 則會重用現有會話。
返回值:成功開始會話返回 TRUE ,反之返回 FALSE
session_status() is used to return the current session status.
返回值:
  • PHP_SESSION_DISABLED if sessions are disabled.
  • PHP_SESSION_NONE if sessions are enabled, but none exists.
  • PHP_SESSION_ACTIVE if sessions are enabled, and one exists.
  • session_unregister — Unregister a global variable from the current session
session_unregister() unregisters the global variable named name from the current session.
The session_unset() function frees all session variables currently registered.
返回值:沒有返回值。
Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.
返回值:沒有返回值。
———————————————————————————————————————————-
———————————————————————————————————————————-
Classes/Object函式:
你可以通過定義這個函式來啟用類的自動載入。引數:
class

待載入的類名。

返回值:沒有返回值。

基於使用者定義的類 original 建立別名 alias。 這個別名類和原有的類完全相同。引數:
original

原有的類。

alias

類的別名。

autoload

如果原始類沒有載入,是否使用自動載入(autoload)。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
class foo { }
class_alias(`foo`, `bar`);
$a = new foo;
$b = new bar;
// the objects are the same
var_dump($a == $b, $a === $b);    //bool(true) bool(false)
var_dump($a instanceof $b);    //bool(true)
// the classes are the same
var_dump($a instanceof foo);    //bool(true)
var_dump($a instanceof bar);    //bool(true)
var_dump($b instanceof foo);    //bool(true)
var_dump($b instanceof bar);    //bool(true)
?>
檢查指定的類是否已定義。引數:
class_name

類名。名字的匹配是大小寫不敏感的。

autoload

是否預設呼叫 __autoload

返回值:如果由 class_name 所指的類已經定義,此函式返回 TRUE,否則返回 FALSE

class_exists() 例子:
<?php
// 使用前檢查類是否存在
if (class_exists(`MyClass`)) {
    $myclass = new MyClass();
}
?>
autoload parameter 例子:
<?php
function __autoload($class){
    include($class . `.php`);
    // Check to see whether the include declared the class
    if (!class_exists($class, false)) {
        trigger_error(“Unable to load class: $class”, E_USER_WARNING);
    }
}
if (class_exists(`MyClass`)) {
    $myclass = new MyClass();
}
?>
  • get_called_class — 後期靜態繫結(”Late Static Binding”)類的名稱
獲取靜態方法呼叫的類名。引數:
返回類的名稱,如果不是在類中呼叫則返回 FALSE
<?php
class foo {
    static public function test() {
        var_dump(get_called_class());
    }
}
class bar extends foo {
}
foo::test();
bar::test();
?>
string(3) "foo"
string(3) "bar"
返回由類的方法名組成的陣列。引數:
class_name

類名或者物件例項。

返回值:返回由 class_name 指定的類中定義的方法名所組成的陣列。如果出錯,則返回 NULL

<?php
class myclass {
    // constructor
    function myclass(){
        return(true);
    }
    // method 1
    function myfunc1(){
        return(true);
    }
    // method 2
    function myfunc2(){
        return(true);
    }
}
$class_methods = get_class_methods(`myclass`);
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
    echo “$method_name
“;
}
?>
myclass
myfunc1
myfunc2
返回由類的預設公有屬性組成的關聯陣列,此陣列的元素以 varname => value 的形式存在。引數:
class_name

The class name

返回值:Returns an associative array of declared properties visible from the current scope, with their default value. The resulting array elements are in the form of varname => value. In case of an error, it returns FALSE.

 get_class_vars() example:
<?php
class myclass {
    var $var1; // this has no default value…
    var $var2 = “xyz”;
    var $var3 = 100;
    private $var4; // PHP 5
    // constructor
    function myclass() {
        // change some properties
        $this->var1 = “foo”;
        $this->var2 = “bar”;
        return true;
    }
}
$my_class = new myclass();
$class_vars = get_class_vars(get_class($my_class));
foreach ($class_vars as $name => $value) {
    echo “$name : $value
“;
}
?>
// Before PHP 4.2.0
var2 : xyz
var3 : 100

// As of PHP 4.2.0
var1 :
var2 : xyz
var3 : 100

get_class_vars() and scoping behaviour:

<?php
function format($array){
    return implode(`|`, array_keys($array)) . ”
“;
}
class TestCase{
    public $a    = 1;
    protected $b = 2;
    private $c   = 3;
    public static function expose(){
        echo format(get_class_vars(__CLASS__));
    }
}
TestCase::expose();
echo format(get_class_vars(`TestCase`));
?>
// 5.0.0
a| * b| TestCase c
a| * b| TestCase c

// 5.0.1 - 5.0.2
a|b|c
a|b|c

// 5.0.3 +
a|b|c
a
返回物件例項 obj 所屬類的名字。如果 obj 不是一個物件則返回 FALSE
使用 get_class():
<?php
class foo {
    function foo(){
    // implements some logic
    }
    function name(){
        echo “My name is ” , get_class($this) , ”
“;
    }
}
// create an object
$bar = new foo();
// external call
echo “Its name is ” , get_class($bar) , ”
“;
// internal call
$bar->name();
?>
Its name is foo
My name is foo

引數:object

The tested object. This parameter may be omitted when inside a class.

 

 

 

 

 

 

 

 

Using get_class() in superclass:
<?php
abstract class bar {
    public function __construct(){
        var_dump(get_class($this));
        var_dump(get_class());
    }
}
class foo extends bar {
}
new foo;
?>
string(3) "foo"
string(3) "bar"
返回值:返回由當前指令碼中已定義類的名字組成的陣列。
<?php
print_r(get_declared_classes());
?>
Array
(
    [0] => stdClass
    [1] => __PHP_Incomplete_Class
    [2] => Directory
)
返回值:本函式返回一個陣列,其內容是當前指令碼中所有已宣告的介面的名字。
<?php
print_r(get_declared_interfaces());
?>
Array
(
    [0] => Traversable
    [1] => IteratorAggregate
    [2] => Iterator
    [3] => ArrayAccess
    [4] => reflector
    [5] => RecursiveIterator
    [6] => SeekableIterator
)
引數:此函式沒有引數
返回值:返回一個陣列,其值包含了所有已定義的 traits 的名稱。 在失敗的情況下返回 NULL
返回由 obj 指定的物件中定義的屬性組成的關聯陣列。
<?php
class Point2D {
    var $x, $y;
    var $label;
    function Point2D($x, $y){
        $this->x = $x;
        $this->y = $y;
    }
    function setLabel($label){
        $this->label = $label;
    }
    function getPoint(){
        return array(“x” => $this->x,
                     “y” => $this->y,
                     “label” => $this->label);
    }
}
// “$label” is declared but not defined
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));
$p1->setLabel(“point #1”);
print_r(get_object_vars($p1));
?>
 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] =>
 )

 Array
 (
     [x] => 1.233
     [y] => 3.445
     [label] => point #1
 )

如果 obj 是物件,則返回物件例項 obj 所屬類的父類名。

如果 obj 是字串,則返回以此字串為名的類的父類名。此功能是在 PHP 4.0.5 中增加的。

<?php
class dad {
    function dad(){
    // implements some logic
    }
}
class child extends dad {
    function child(){
        echo “I`m ” , get_parent_class($this) , “`s son
“;
    }
}
class child2 extends dad {
    function child2(){
        echo “I`m ” , get_parent_class(`child2`) , “`s son too
“;
    }
}
$foo = new child();
$bar = new child2();
?>

I`m dad`s son
I`m dad`s son too
引數:object

The tested object or class name

檢查介面是否已被定義。引數:
interface_name

介面名。

autoload

預設是否呼叫 __autoload

返回值:本函式在由 interface_name 給出的介面已定義時返回 TRUE,否則返回 FALSE

<?php
// 在嘗試使用前先檢查介面是否存在
if (interface_exists(`MyInterface`)) {
    class MyClass implements MyInterface{
        // Methods
    }
}
?>
  • is_a — 如果物件屬於該類或該類是此物件的父類則返回 TRUE
如果 object 是該類或該類是此物件的父類。引數:
object

The tested object

class_name

The class name

allow_string

If this parameter set to FALSE, string class name as object is not allowed. This also prevents from calling autoloader if the class doesn`t exist.

返回值:Returns TRUE if the object is of this class or has this class as one of its parents, FALSE otherwise.

is_a() 例子:
<?php
// define a class
class WidgetFactory{
  var $oink = `moo`;
}
// create a new object
$WF = new WidgetFactory();
if (is_a($WF, `WidgetFactory`)) {
  echo “yes, $WF is still a WidgetFactory
“;
}
?>
在 PHP 5 中使用 instanceof 運算子:
<?php
if ($WF instanceof WidgetFactory) {
    echo `Yes, $WF is a WidgetFactory`;
}
?>
  • is_subclass_of — 如果此物件是該類的子類,則返回 TRUE
如果物件 object 所屬類是類 class_name 的子類,則返回 TRUE,否則返回 FALSE。引數:
object

A class name or an object instance

class_name

The class name

allow_string

If this parameter set to false, string class name as object is not allowed. This also prevents from calling autoloader if the class doesn`t exist.

返回值:This function returns TRUE if the object object, belongs to a class which is a subclass of class_nameFALSEotherwise.

<?php
// define a class
class WidgetFactory{
  var $oink = `moo`;
}
// define a child class
class WidgetFactory_Child extends WidgetFactory{
  var $oink = `oink`;
}
// create a new object
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();
if (is_subclass_of($WFC, `WidgetFactory`)) {
  echo “yes, $WFC is a subclass of WidgetFactory
“;
} else {
  echo “no, $WFC is not a subclass of WidgetFactory
“;
}
if (is_subclass_of($WF, `WidgetFactory`)) {
  echo “yes, $WF is a subclass of WidgetFactory
“;
} else {
  echo “no, $WF is not a subclass of WidgetFactory
“;
}
// usable only since PHP 5.0.3
if (is_subclass_of(`WidgetFactory_Child`, `WidgetFactory`)) {
  echo “yes, WidgetFactory_Child is a subclass of WidgetFactory
“;
} else {
  echo “no, WidgetFactory_Child is not a subclass of WidgetFactory
“;
}
?>
yes, $WFC is a subclass of WidgetFactory
no, $WF is not a subclass of WidgetFactory
yes, WidgetFactory_Child is a subclass of WidgetFactory
檢查類的方法是否存在於指定的 object中。引數:
object

物件示例或者類名。

method_name

方法名。

返回值:如果 method_name 所指的方法在 object 所指的物件類中已定義,則返回 TRUE,否則返回 FALSE

 method_exists() 例子:
 <?php
$directory = new Directory(`.`);
var_dump(method_exists($directory,`read`));    //bool(true)
?>
Static method_exists() 例子:
<?php
var_dump(method_exists(`Directory`,`read`));    //bool(true)
?>
本函式檢查給出的 property 是否存在於指定的類中(以及是否能在當前範圍內訪問)。引數:
class

字串形式的類名或要檢查的類的一個物件

property

屬性的名字

返回值:如果該屬性存在則返回 TRUE,如果不存在則返回 FALSE,出錯返回 NULL

<?php
class myClass {
    public $mine;
    private $xpto;
    static protected $test;
    static function test() {
        var_dump(property_exists(`myClass`, `xpto`)); //true
    }
}
var_dump(property_exists(`myClass`, `mine`));   //true
var_dump(property_exists(new myClass, `mine`)); //true
var_dump(property_exists(`myClass`, `xpto`));   //true, as of PHP 5.3.0
var_dump(property_exists(`myClass`, `bar`));    //false
var_dump(property_exists(`myClass`, `test`));   //true, as of PHP 5.3.0
myClass::test();
?>
引數:
traitname

待檢查的 trait 的名稱

autoload

如果尚未載入,是否使用自動載入(autoload)。

返回值:如果 trait 存在返回 TRUE,不存在則返回 FALSE。發生錯誤的時候返回 NULL

 

 

 

———————————————————————————————————————————-
———————————————————————————————————————————-
MySQL函式:
取得最近一次與 link_identifier 關聯的 INSERT,UPDATE 或 DELETE 查詢所影響的記錄行數。引數:
link_identifier

MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。

mysql_affected_rows() 例子:

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
mysql_select_db(`mydb`);
/* 本例返回被刪除記錄的準確數目 */
mysql_query(`DELETE FROM mytable WHERE id < 10`);
printf(“Records deleted: %d
“, mysql_affected_rows());
/* 對於非真值的 WHERE 子句,應返回 0 */
mysql_query(`DELETE FROM mytable WHERE 0`);
printf(“Records deleted: %d
“, mysql_affected_rows());
?>
Records deleted: 10
Records deleted: 0

使用事務處理的 mysql_affected_rows() 例子:

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
mysql_select_db(`mydb`);
/* Update records */
mysql_query(“UPDATE mytable SET used=1 WHERE id < 10”);
printf (“Updated records: %d
“, mysql_affected_rows());
mysql_query(“COMMIT”);
?>
Updated Records: 10
從 MySQL 中取得 character_set 變數的值。引數:
link_identifier

MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。

返回值:返回當前連線的預設字符集名稱。

<?php
$link    = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
$charset = mysql_client_encoding($link);
echo “The current character set is: $charset
“;
?>
The current character set is: latin1
mysql_close() 關閉指定的連線標識所關聯的到 MySQL 伺服器的非持久連線。如果沒有指定 link_identifier,則關閉上一個開啟的連線。引數:
link_identifier

MySQL 連線. 如果該連線識別符號未給出, 將使用最近一次mysql_connect()建立的連線. 如果沒有找到可使用的連線, 將產生一個 E_WARNING 錯誤.

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
?>
Connected successfully
開啟或重複使用一個到 MySQL 伺服器的連線。引數:
server

MySQL 伺服器。可以包括埠號,例如 “hostname:port”,或者到本地套接字的路徑,例如對於 localhost 的 “:/path/to/socket”。

如果 PHP 指令 mysql.default_host 未定義(預設情況),則預設值是 `localhost:3306`。 在 SQL 安全模式 時,引數被忽略,總是使用 `localhost:3306`。

username

使用者名稱。預設值由 mysql.default_user 定義。 在 SQL 安全模式 時,引數被忽略,總是使用伺服器程式所有者的使用者名稱。

password

密碼。預設值由mysql.default_password定義。在 SQL 安全模式 時,引數被忽略,總是使用空密碼。

new_link

如果用同樣的引數第二次呼叫 mysql_connect(),將不會建立新連線,而將返回已經開啟的連線標識。引數new_link 改變此行為並使 mysql_connect() 總是開啟新的連線,甚至當 mysql_connect() 曾在前面被用同樣的引數呼叫過。

client_flags

client_flags 引數可以是以下常量的組合:MYSQL_CLIENT_SSLMYSQL_CLIENT_COMPRESSMYSQL_CLIENT_IGNORE_SPACE 或MYSQL_CLIENT_INTERACTIVE。進一步資訊見MySQL 客戶端常量

返回值:如果成功則返回一個 MySQL 連線標識, 或者在失敗時返回 FALSE

 mysql_connect() 例子:
<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
?>
mysql_connect() 例子:使用 hostname:port 語法:
<?php
// we connect to example.com and port 3307
$link = mysql_connect(`example.com:3307`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
// we connect to localhost at port 3307
$link = mysql_connect(`127.0.0.1:3307`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
?>
mysql_connect() 例子:使用 “:/path/to/socket” 語法:
<?php
// we connect to localhost and socket e.g. /tmp/mysql.sock
//variant 1: ommit localhost
$link = mysql_connect(`/tmp/mysql`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
// variant 2: with localhost
$link = mysql_connect(`localhost:/tmp/mysql.sock`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
echo `Connected successfully`;
mysql_close($link);
?>
mysql_create_db() 嘗試在指定的連線標識所關聯的伺服器上建立一個新資料庫。引數:
database_name

要建立的資料庫名。

link_identifier

MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
$sql = `CREATE DATABASE my_db`;
if (mysql_query($sql, $link)) {
    echo “Database my_db created successfully
“;
} else {
    echo `Error creating database: ` . mysql_error() . ”
“;
}
?>
Database my_db created successfully
mysql_data_seek() 將指定的結果標識所關聯的 MySQL 結果內部的行指標移動到指定的行號。接著呼叫mysql_fetch_row() 將返回那一行。引數:
result

resource 型的結果集。此結果集來自對 mysql_query() 的呼叫。

row_number

想要設定的新的結果集指標的行數。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
$db_selected = mysql_select_db(`sample_db`);
if (!$db_selected) {
    die(`Could not select database: ` . mysql_error());
}
$query = `SELECT last_name, first_name FROM friends`;
$result = mysql_query($query);
if (!$result) {
    die(`Query failed: ` . mysql_error());
}
/* fetch rows in reverse order */
for ($i = mysql_num_rows($result) – 1; $i >= 0; $i–) {
    if (!mysql_data_seek($result, $i)) {
        echo “Cannot seek to row $i: ” . mysql_error() . ”
“;
        continue;
    }
    if (!($row = mysql_fetch_assoc($result))) {
        continue;
    }
    echo $row[`last_name`] . ` ` . $row[`first_name`] . “<br />
“;
}
mysql_free_result($result);
?>
取得 mysql_list_dbs() 呼叫所返回的資料庫名。引數:
result

mysql_list_dbs() 呼叫所返回的結果指標。

row

結果集中的行號。

field

欄位名。

返回值:如果成功則返回資料庫名,失敗返回 FALSE。如果返回了 FALSE,用 mysql_error() 來判斷錯誤的種類。

<?php
error_reporting(E_ALL);
$link = mysql_connect(`dbhost`, `username`, `password`);
$db_list = mysql_list_dbs($link);
$i = 0;
$cnt = mysql_num_rows($db_list);
while ($i < $cnt) {
    echo mysql_db_name($db_list, $i) . ”
“;
    $i++;
}
?>

根據查詢結果返回一個正的 MySQL 結果資源號,出錯時返回 FALSE。本函式會對 INSERT/UPDATE/DELETE 查詢返回TRUE/FALSE 來指示成功或失敗。

mysql_db_query() 選擇一個資料庫並在其上執行查詢。如果沒有提供可選的連線標識,本函式會去找一個到 MySQL 伺服器的已開啟的連線,如果找不到已開啟連線則會嘗試無引數呼叫 mysql_connect() 來建立一個。

注意此函式不會切換回先前連線到的資料庫。換句話說,不能用此函式臨時在另一個資料庫上執行 sql 查詢,只能手工切換回來。強烈建議使用者在 sql 查詢中使用 database.table 語法來替代此函式。

mysql_drop_db() 嘗試丟棄(刪除)指定連線標識所關聯的伺服器上的一整個資料庫。

成功時返回 TRUE, 或者在失敗時返回 FALSE

為向下相容也可以用 mysql_dropdb(),但反對這樣做。

不提倡使用 mysql_drop_db() 函式最好用 mysql_query() 提交一條 SQL DROP DATABASE 語句來替代。

 

database_name    The name of the database that will be deleted.link_identifier    MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect: ` . mysql_error());
}
$sql = `DROP DATABASE my_db`;
if (mysql_query($sql, $link)) {
    echo “Database my_db was successfully dropped
“;
} else {
    echo `Error dropping database: ` . mysql_error() . ”
“;
}
?>
  • mysql_errno — 返回上一個 MySQL 操作中的錯誤資訊的數字編碼

返回上一個 MySQL 函式的錯誤號碼,如果沒有出錯則返回 0(零)。

從 MySQL 資料庫後端來的錯誤不再發出警告,要用 mysql_errno() 來提取錯誤程式碼。注意本函式僅返回最近一次 MySQL 函式的執行(不包括 mysql_error() 和 mysql_errno())的錯誤程式碼,因此如果要使用此函式,確保在呼叫另一個 MySQL 函式之前檢查它的值。

<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
    mysql_select_db(“nonexistentdb”);
    echo mysql_errno() . “: ” . mysql_error(). ”
“;
    mysql_select_db(“kossu”);
    mysql_query(“SELECT * FROM nonexistenttable”);
    echo mysql_errno() . “: ” . mysql_error() . ”
“;
?>

1049: Unknown database `nonexistentdb`
1146: Table `kossu.nonexistenttable` doesn`t exist
  • mysql_error — 返回上一個 MySQL 操作產生的文字錯誤資訊

返回上一個 MySQL 函式的錯誤文字,如果沒有出錯則返回 (空字串)。如果沒有指定連線資源號,則使用上一個成功開啟的連線從 MySQL 伺服器提取錯誤資訊。

從 MySQL 資料庫後端來的錯誤不再發出警告,要用 mysql_error() 來提取錯誤文字。注意本函式僅返回最近一次 MySQL 函式的執行(不包括 mysql_error() 和 mysql_errno())的錯誤文字,因此如果要使用此函式,確保在呼叫另一個 MySQL 函式之前檢查它的值。

<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
    mysql_select_db(“nonexistentdb”);
    echo mysql_errno() . “: ” . mysql_error(). ”
“;
    mysql_select_db(“kossu”);
    mysql_query(“SELECT * FROM nonexistenttable”);
    echo mysql_errno() . “: ” . mysql_error() . ”
“;
?>

1049: Unknown database `nonexistentdb`
1146: Table `kossu.nonexistenttable` doesn`t exist
本函式將 unescaped_string 轉義,使之可以安全用於 mysql_query()
<?php
    $item = “Zak`s Laptop”;
    $escaped_item = mysql_escape_string($item);
    printf (“Escaped string: %s
“, $escaped_item);
?>
Escaped string: Zak`s Laptop
  • mysql_fetch_array — 從結果集中取得一行作為關聯陣列,或數字陣列,或二者兼有
返回根據從結果集取得的行生成的陣列,如果沒有更多行則返回 FALSE
mysql_fetch_array 使用 MYSQL_NUM:
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    mysql_select_db(“mydb”);
    $result = mysql_query(“SELECT id, name FROM mytable”);
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        printf (“ID: %s  Name: %s”, $row[0], $row[1]);
    }
    mysql_free_result($result);
?>
mysql_fetch_array 使用 MYSQL_ASSOC:
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    mysql_select_db(“mydb”);
    $result = mysql_query(“SELECT id, name FROM mytable”);
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        printf (“ID: %s  Name: %s”, $row[“id”], $row[“name”]);
    }
    mysql_free_result($result);
?>
mysql_fetch_array 使用 MYSQL_BOTH:
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    mysql_select_db(“mydb”);
    $result = mysql_query(“SELECT id, name FROM mytable”);
    while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        printf (“ID: %s  Name: %s”, $row[0], $row[“name”]);
    }
    mysql_free_result($result);
?>
返回對應結果集的關聯陣列,並且繼續移動內部資料指標。 mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二個可選引數 MYSQL_ASSOC 完全相同。它僅僅返回關聯陣列。引數:
result

resource 型的結果集。此結果集來自對 mysql_query() 的呼叫。

返回值:

返回根據從結果集取得的行生成的關聯陣列;如果沒有更多行則返回 FALSE

如果結果中的兩個或以上的列具有相同欄位名,最後一列將優先。要訪問同名的其它列,要麼用 mysql_fetch_row()來取得數字索引或給該列起個別名。 參見 mysql_fetch_array() 例子中有關別名說明。

<?php
$conn = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
if (!$conn) {
    echo “Unable to connect to DB: ” . mysql_error();
    exit;
}
if (!mysql_select_db(“mydbname”)) {
    echo “Unable to select mydbname: ” . mysql_error();
    exit;
}
$sql = “SELECT id as userid, fullname, userstatus 
        FROM   sometable
        WHERE  userstatus = 1″;
$result = mysql_query($sql);
if (!$result) {
    echo “Could not successfully run query ($sql) from DB: ” . mysql_error();
    exit;
}
if (mysql_num_rows($result) == 0) {
    echo “No rows found, nothing to print so am exiting”;
    exit;
}
// While a row of data exists, put that row in $row as an associative array
// Note: If you`re expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you`ll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row[“userid”];
    echo $row[“fullname”];
    echo $row[“userstatus”];
}
mysql_free_result($result);
?>

返回一個包含欄位資訊的物件。

mysql_fetch_field() 可以用來從某個查詢結果中取得欄位的資訊。如果沒有指定欄位偏移量,則下一個尚未被mysql_fetch_field() 取得的欄位被提取。

物件的屬性為:

  • name – 列名
  • table – 該列所在的表名
  • max_length – 該列最大長度
  • not_null – 1,如果該列不能為 NULL
  • primary_key – 1,如果該列是 primary key
  • unique_key – 1,如果該列是 unique key
  • multiple_key – 1,如果該列是 non-unique key
  • numeric – 1,如果該列是 numeric
  • blob – 1,如果該列是 BLOB
  • type – 該列的型別
  • unsigned – 1,如果該列是無符號數
  • zerofill – 1,如果該列是 zero-filled
<?php
mysql_connect(`localhost:3306`, $user, $password)
    or die(“Could not connect: ” . mysql_error());
mysql_select_db(“database”);
$result = mysql_query(“select * from table”)
    or die(“Query failed: ” . mysql_error());
/* get column metadata */
$i = 0;
while ($i < mysql_num_fields($result)) {
    echo “Information for column $i:<br />
“;
    $meta = mysql_fetch_field($result);
    if (!$meta) {
        echo “No information available<br />
“;
    }
    echo “<pre>
blob:         $meta->blob
max_length:   $meta->max_length
multiple_key: $meta->multiple_key
name:         $meta->name
not_null:     $meta->not_null
numeric:      $meta->numeric
primary_key:  $meta->primary_key
table:        $meta->table
type:         $meta->type
unique_key:   $meta->unique_key
unsigned:     $meta->unsigned
zerofill:     $meta->zerofill
</pre>”;
    $i++;
}
mysql_free_result($result);
?>

以陣列返回上一次用 mysql_fetch_row() 取得的行中每個欄位的長度,如果出錯返回 FALSE

mysql_fetch_lengths() 將上一次 mysql_fetch_row()mysql_fetch_array() 和 mysql_fetch_object() 所返回的每個列的長度儲存到一個陣列中,偏移量從 0 開始。引數:

返回根據所取得的行生成的物件,如果沒有更多行則返回 FALSE

mysql_fetch_object() 和 mysql_fetch_array() 類似,只有一點區別 – 返回一個物件而不是陣列。間接地也意味著只能通過欄位名來訪問陣列,而不是偏移量(數字是合法的屬性名)。

mysql_fetch_object() example:

<?php
mysql_connect(“hostname”, “user”, “password”);
mysql_select_db(“mydb”);
$result = mysql_query(“select * from mytable”);
while ($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}
mysql_free_result($result);
?>
 mysql_fetch_object() example:
<?php
class foo {
    public $name;
}
mysql_connect(“hostname”, “user”, “password”);
mysql_select_db(“mydb”);
$result = mysql_query(“select name from mytable limit 1”);
$obj = mysql_fetch_object($result, `foo`);
var_dump($obj);
?>

返回根據所取得的行生成的陣列,如果沒有更多行則返回 FALSE

mysql_fetch_row() 從和指定的結果標識關聯的結果集中取得一行資料並作為陣列返回。每個結果的列儲存在一個陣列的單元中,偏移量從 0 開始。

 

依次呼叫 mysql_fetch_row() 將返回結果集中的下一行,如果沒有更多行則返回 FALSE


<?php
$result = mysql_query(“SELECT id,email FROM people WHERE id = `42`”);
if (!$result) {
    echo `Could not run query: ` . mysql_error();
    exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // 42
echo $row[1]; // the email value
?>

mysql_field_flags() 返回指定欄位的欄位標誌。每個標誌都用一個單詞表示,之間用一個空格分開,因此可以用explode() 將其分開。

mysql_field_len() 返回指定欄位的長度。

為向下相容仍然可以使用 mysql_fieldlen(),但反對這樣做。

mysql_field_name() 返回指定欄位索引的欄位名。result 必須是一個合法的結果識別符號,field_index 是該欄位的數字偏移量。引數:
result

resource 型的結果集。此結果集來自對 mysql_query() 的呼叫。

field_offset

數值型欄位偏移量。 field_offset 從 0 開始。如果 field_offset 不存在,則會發出一個 E_WARNING 級別的錯誤

返回值:The name of the specified field index on success 或者在失敗時返回 FALSE.

<?php
/* The users table consists of three fields:
 *   user_id
 *   username
 *   password.
 */
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
if (!$link) {
    die(`Could not connect to MySQL server: ` . mysql_error());
}
$dbname = `mydb`;
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) {
    die(“Could not set $dbname: ” . mysql_error());
}
$res = mysql_query(`select * from users`, $link);
echo mysql_field_name($res, 0) . ”
“;
echo mysql_field_name($res, 2);
?>
user_id
password
  • mysql_field_seek — 將結果集中的指標設定為制定的欄位偏移量
用指定的欄位偏移量檢索。如果下一個 mysql_fetch_field() 的呼叫不包括欄位偏移量,則會返回本次mysql_field_seek() 中指定的偏移量的欄位。

返回指定欄位所在的表的名字。

為向下相容仍然可以使用 mysql_fieldtable(),但反對這樣做。

引數:
result

resource 型的結果集。此結果集來自對 mysql_query() 的呼叫。

field_offset

數值型欄位偏移量。 field_offset 從 0 開始。如果 field_offset 不存在,則會發出一個 E_WARNING 級別的錯誤

<?php
    mysql_connect(“localhost”, “mysql_username”, “mysql_password”);
    mysql_select_db(“mysql”);
    $result = mysql_query(“SELECT * FROM func”);
    $fields = mysql_num_fields($result);
    $rows   = mysql_num_rows($result);
    $table = mysql_field_table($result, 0);
    echo “Your `”.$table.”` table has “.$fields.” fields and “.$rows.” record(s)
“;
    echo “The table has the following fields:
“;
    for ($i=0; $i < $fields; $i++) {
        $type  = mysql_field_type($result, $i);
        $name  = mysql_field_name($result, $i);
        $len   = mysql_field_len($result, $i);
        $flags = mysql_field_flags($result, $i);
        echo $type.” “.$name.” “.$len.” “.$flags.”
“;
    }
    mysql_free_result($result);
    mysql_close();
?>
Your `func` table has 4 fields and 1 record(s)
The table has the following fields:
string name 64 not_null primary_key binary
int ret 1 not_null
string dl 128 not_null
string type 9 not_null enum

mysql_free_result() 將釋放所有與結果識別符號 result 所關聯的記憶體。

mysql_free_result() 僅需要在考慮到返回很大的結果集時會佔用多少記憶體時呼叫。在指令碼結束後所有關聯的記憶體都會被自動釋放。

成功時返回 TRUE, 或者在失敗時返回 FALSE

為向下相容仍然可以使用 mysql_freeresult(),但反對這樣做。引數:

result

resource 型的結果集。此結果集來自對 mysql_query() 的呼叫。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

<?php
$result = mysql_query(“SELECT id,email FROM people WHERE id = `42`”);
if (!$result) {
    echo `Could not run query: ` . mysql_error();
    exit;
}
/* Use the result, assuming we`re done with it afterwards */
$row = mysql_fetch_assoc($result);
/* Now we free up the result and continue on with our script */
mysql_free_result($result);
echo $row[`id`];
echo $row[`email`];
?>
mysql_get_client_info() 返回一個字串指出了客戶端庫的版本。
<?php
    printf (“MySQL client info: %s
“, mysql_get_client_info());
?>
MySQL client info: 3.23.39
mysql_get_host_info() 返回一個字串說明了連線 link_identifier 所使用的連線方式,包括伺服器的主機名。如果省略 link_identifier,則使用上一個開啟的連線。
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    printf (“MySQL host info: %s
“, mysql_get_host_info());
?>
MySQL host info: Localhost via UNIX socket
mysql_get_proto_info() 返回 link_identifier 所使用的協議版本。如果省略 link_identifier,則使用上一個開啟的連線。
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    printf (“MySQL protocol version: %s
“, mysql_get_proto_info());
?>
MySQL protocol version: 10
mysql_get_server_info() 返回 link_identifier 所使用的伺服器版本。如果省略 link_identifier,則使用上一個開啟的連線。
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    printf (“MySQL server version: %s
“, mysql_get_server_info());
?>
MySQL server version: 4.0.1-alpha
  • mysql_info — 取得最近一條查詢的資訊

mysql_info() 返回通過給定的 link_identifier 所進行的最新一條查詢的詳細資訊。如果沒有指定link_identifier,則假定為上一個開啟的連線。

mysql_info() 對以下列出的所有語句返回一個字串。對於其它任何語句返回 FALSE。字串的格式取決於給出的語句。

mysql_insert_id() 返回給定的 link_identifier 中上一步 INSERT 查詢中產生的 AUTO_INCREMENT 的 ID 號。如果沒有指定 link_identifier,則使用上一個開啟的連線。

如果上一查詢沒有產生 AUTO_INCREMENT 的值,則 mysql_insert_id() 返回 0。如果需要儲存該值以後使用,要確保在產生了值的查詢之後立即呼叫 mysql_insert_id()。

<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”) or
        die(“Could not connect: ” . mysql_error());
    mysql_select_db(“mydb”);
    mysql_query(“INSERT INTO mytable (product) values (`kossu`)”);
    printf (“Last inserted record has id %d
“, mysql_insert_id());
?>

mysql_list_dbs() 將返回一個結果指標,包含了當前 MySQL 程式中所有可用的資料庫。用 mysql_tablename() 函式來遍歷此結果指標,或者任何使用結果表的函式,例如 mysql_fetch_array()
<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
    echo $row->Database . ”
“;
}
?>
database1
database2
database3
...
mysql_list_fields() 取得給定表名的資訊。引數是資料庫名和表名。返回一個結果指標,可以用於mysql_field_flags()mysql_field_len()mysql_field_name() 和 mysql_field_type()
<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
$fields = mysql_list_fields(“database1”, “table1”, $link);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {
    echo mysql_field_name($fields, $i) . ”
“;
}
field1
field2
field3
...

為向下相容仍然可以使用 mysql_listfields(),但反對這樣做。

mysql_list_processes() 返回一個結果指標,說明了當前伺服器的執行緒。
<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
$result = mysql_list_processes($link);
while ($row = mysql_fetch_assoc($result)){
    printf(“%s %s %s %s %s
“, $row[“Id”], $row[“Host”], $row[“db”],
       $row[“Command”], $row[“Time”]);
}
mysql_free_result ($result);
?>
1 localhost test Processlist 0
4 localhost mysql sleep 5

mysql_list_tables() 接受一個資料庫名並返回和 mysql_query() 函式很相似的一個結果指標。用 mysql_tablename()函式來遍歷此結果指標,或者任何使用結果表的函式,例如 mysql_fetch_array()

database 引數是需要被取得其中的的表名的資料庫名。如果失敗 mysql_list_tables() 返回 FALSE

為向下相容仍然可以使用本函式的別名 mysql_listtables(),但反對這樣做。

<?php
    $dbname = `mysql_dbname`;
    if (!mysql_connect(`mysql_host`, `mysql_user`, `mysql_password`)) {
        print `Could not connect to mysql`;
        exit;
    }
    $result = mysql_list_tables($dbname);
    if (!$result) {
        print “DB Error, could not list tables
“;
        print `MySQL Error: ` . mysql_error();
        exit;
    }
    while ($row = mysql_fetch_row($result)) {
        print “Table: $row[0]
“;
    }
    mysql_free_result($result);
?>

mysql_num_fields() 返回結果集中欄位的數目。為向下相容仍然可以使用 mysql_numfields(),但反對這樣做。
mysql_num_rows() 返回結果集中行的數目。此命令僅對 SELECT 語句有效。要取得被 INSERT,UPDATE 或者 DELETE 查詢所影響到的行的數目,用 mysql_affected_rows()
<?php
$link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
mysql_select_db(“database”, $link);
$result = mysql_query(“SELECT * FROM table1”, $link);
$num_rows = mysql_num_rows($result);
echo “$num_rows Rows
“;
?>

如果成功則返回一個正的 MySQL 持久連線識別符號,出錯則返回 FALSE

mysql_pconnect() 建立一個到 MySQL 伺服器的連線。如果沒有提供可選引數,則使用如下預設值:server = `localhost:3306`,username = 伺服器程式所有者的使用者名稱,password = 空密碼。client_flags 引數可以是以下常量的組合:MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或者 MYSQL_CLIENT_INTERACTIVE。

server 引數也可以包括埠號,例如 “hostname:port”,或者是本機套接字的的路徑,例如 “:/path/to/socket”。

mysql_pconnect() 和 mysql_connect() 非常相似,但有兩個主要區別。

首先,當連線的時候本函式將先嚐試尋找一個在同一個主機上用同樣的使用者名稱和密碼已經開啟的(持久)連線,如果找到,則返回此連線標識而不開啟新連線。

其次,當指令碼執行完畢後到 SQL 伺服器的連線不會被關閉,此連線將保持開啟以備以後使用(mysql_close() 不會關閉由 mysql_pconnect() 建立的連線)。

可選引數 client_flags 自 PHP 4.3.0 版起可用。

此種連線稱為“持久的”。

  • mysql_ping — Ping 一個伺服器連線,如果沒有連線則重新連線
mysql_ping() 檢查到伺服器的連線是否正常。如果斷開,則自動嘗試連線。本函式可用於空閒很久的指令碼來檢查伺服器是否關閉了連線,如果有必要則重新連線上。如果到伺服器的連線可用則 mysql_ping() 返回 TRUE,否則返回FALSE
mysql_query() 向與指定的 link_identifier 關聯的伺服器中的當前活動資料庫傳送一條查詢(不支援多條查詢)引數:
query

SQL 查詢語句

查詢字串不應以分號結束。 查詢中被嵌入的資料應該正確地轉義

link_identifier

MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。

返回值:

mysql_query() 僅對 SELECT,SHOW,DESCRIBE, EXPLAIN 和其他語句 語句返回一個 resource,如果查詢出現錯誤則返回 FALSE

對於其它型別的 SQL 語句,比如INSERT, UPDATE, DELETE, DROP 之類, mysql_query() 在執行成功時返回 TRUE,出錯時返回 FALSE

返回的結果資源應該傳遞給 mysql_fetch_array() 和其他函式來處理結果表,取出返回的資料。

假定查詢成功,可以呼叫 mysql_num_rows() 來檢視對應於 SELECT 語句返回了多少行,或者呼叫mysql_affected_rows() 來檢視對應於 DELETE,INSERT,REPLACE 或 UPDATE 語句影響到了多少行。

如果沒有許可權訪問查詢語句中引用的表時,mysql_query() 也會返回 FALSE

 無效的查詢:

<?php
$result = mysql_query(`SELECT * WHERE 1=1`);
if (!$result) {
    die(`Invalid query: ` . mysql_error());
}
?>

有效的查詢:

<?php
// 這應該由使用者提供,下面是一個示例
$firstname = `fred`;
$lastname  = `fox`;
// 構造查詢
// 這是執行 SQL 最好的方式
// 更多例子參見 mysql_real_escape_string()
$query = sprintf(“SELECT firstname, lastname, address, age FROM friends 
    WHERE firstname=`%s` AND lastname=`%s`”,
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));
// 執行查詢
$result = mysql_query($query);
// 檢查結果
// 下面顯示了實際傳送給 MySQL 的查詢,以及出現的錯誤。這對除錯很有幫助。
if (!$result) {
    $message  = `Invalid query: ` . mysql_error() . ”
“;
    $message .= `Whole query: ` . $query;
    die($message);
}
// 結果的使用
// 嘗試 print $result 並不會取出結果資源中的資訊
// 所以必須至少使用其中一個 mysql 結果函式
// 參見 mysql_result(), mysql_fetch_array(), mysql_fetch_row() 等。
while ($row = mysql_fetch_assoc($result)) {
    echo $row[`firstname`];
    echo $row[`lastname`];
    echo $row[`address`];
    echo $row[`age`];
}
// 釋放關聯結果集的資源
// 在指令碼結束的時候會自動進行
mysql_free_result($result);
?>

  • mysql_real_escape_string — 轉義 SQL 語句中使用的字串中的特殊字元,並考慮到連線的當前字符集
本函式將 unescaped_string 中的特殊字元轉義,並計及連線的當前字符集,因此可以安全用於 mysql_query()
<?php
$item = “Zak`s and Derick`s Laptop”;
$escaped_item = mysql_real_escape_string($item);
printf (“Escaped string: %s
“, $escaped_item);
?>
Escaped string: Zak`s and Derick`s Laptop

mysql_result() 返回 MySQL 結果集中一個單元的內容。欄位引數可以是欄位的偏移量或者欄位名,或者是欄位表點欄位名(tablename.fieldname)。如果給列起了別名(`select foo as bar from…`),則用別名替代列名。

當作用於很大的結果集時,應該考慮使用能夠取得整行的函式(在下邊指出)。這些函式在一次函式呼叫中返回了多個單元的內容,比 mysql_result() 快得多。此外注意在欄位引數中指定數字偏移量比指定欄位名或者 tablename.fieldname 要快得多。

呼叫 mysql_result() 不能和其它處理結果集的函式混合呼叫。

<?php
    $link = mysql_connect(“localhost”, “mysql_user”, “mysql_password”)
            or die(“Could not connect: ” . mysql_error());
    $result = mysql_query(“SELECT name FROM work.employee”)
            or die(“Could not query: . mysql_error());
    echo mysql_result($result,2); // outputs third employee`s name
    mysql_close($link);
?>

成功時返回 TRUE, 或者在失敗時返回 FALSE

mysql_select_db() 設定與指定的連線識別符號所關聯的伺服器上的當前啟用資料庫。如果沒有指定連線識別符號,則使用上一個開啟的連線。如果沒有開啟的連線,本函式將無引數呼叫 mysql_connect() 來嘗試開啟一個並使用之。

每個其後的 mysql_query() 呼叫都會作用於活動資料庫。


<?php
$lnk = mysql_connect(`localhost`, `mysql_user`, `mysql_password`)
       or die (`Not connected : ` . mysql_error());
// make foo the current db
mysql_select_db(`foo`, $lnk) or die (`Can`t use foo : ` . mysql_error());
?>

設定當前連線的預設字符集。引數:
charset

一個有效的字符集名稱。

link_identifier

MySQL 連線。如不指定連線標識,則使用由 mysql_connect() 最近開啟的連線。如果沒有找到該連線,會嘗試不帶引數呼叫 mysql_connect() 來建立。如沒有找到連線或無法建立連線,則會生成 E_WARNING 級別的錯誤。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE

mysql_stat() 返回當前伺服器狀態。
<?php
$link = mysql_connect(`localhost`, “mysql_user”, “mysql_password”);
$status = explode(`  `, mysql_stat($link));
print_r($status);
?>
Array
(
    [0] => Uptime: 5380
    [1] => Threads: 2
    [2] => Questions: 1321299
    [3] => Slow queries: 0
    [4] => Opens: 26
    [5] => Flush tables: 1
    [6] => Open tables: 17
    [7] => Queries per second avg: 245.595
)
mysql_tablename() 接受 mysql_list_tables() 返回的結果指標以及一個整數索引作為引數並返回表名。可以用mysql_num_rows() 函式來判斷結果指標中的表的數目。用 mysql_tablename() 函式來遍歷此結果指標,或者任何處理結果表的函式,例如 mysql_fetch_array()
<?php
    mysql_connect(“localhost”, “mysql_user”, “mysql_password”);
    $result = mysql_list_tables(“mydb”);
    for ($i = 0; $i < mysql_num_rows($result); $i++)
        printf (“Table: %s
“, mysql_tablename($result, $i));
    mysql_free_result($result);
?>
mysql_thread_id() 返回當前執行緒的 ID。如果連線丟失了並用 mysql_ping() 重新連線上,執行緒 ID 會改變。這意味著不能取得執行緒的 ID 後儲存起來備用。當需要的時候再去獲取之。
<?php
$link = mysql_connect(`localhost`, `mysql_user`, `mysql_password`);
$thread_id = mysql_thread_id($link);
if ($thread_id){
    printf (“current thread id is %d
“, $thread_id);
}
?>
current thread id is 73
mysql_unbuffered_query() 向 MySQL 傳送一條 SQL 查詢 query,但不像 mysql_query() 那樣自動獲取並快取結果集。一方面,這在處理很大的結果集時會節省可觀的記憶體。另一方面,可以在獲取第一行後立即對結果集進行操作,而不用等到整個 SQL 語句都執行完畢。當使用多個資料庫連線時,必須指定可選引數 link_identifier
———————————————————————————————————————————-
———————————————————————————————————————————-
Math函式:
  • abs — 絕對值
<?php
$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5);   // $abs2 = 5; (integer)
$abs3 = abs(-5);  // $abs3 = 5; (integer)
?>
  • acos — 反餘弦
  • acosh — 反雙曲餘弦
  • asin — 反正弦
  • asinh — 反雙曲正弦
  • atan2 — 兩個引數的反正切
  • atan — 反正切
  • atanh — 反雙曲正切
  • base_convert — 在任意進位制之間轉換數字
<?php
$hexadecimal = `A37334`;
echo base_convert($hexadecimal, 16, 2);    //101000110111001100110100
?>
  • bindec — 二進位制轉換為十進位制
  • ceil — 進一法取整
<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>
  • cos — 餘弦
<?php
echo cos(M_PI); // -1
?>
  • cosh — 雙曲餘弦
  • decbin — 十進位制轉換為二進位制
<?php
echo decbin(12) . ”
“;    //1100
echo decbin(26);    //11010
?>
  • dechex — 十進位制轉換為十六進位制
<?php
echo dechex(10) . ”
“;    //a
echo dechex(47);    //2f
?>
  • decoct — 十進位制轉換為八進位制
<?php
echo decoct(15) . ”
“;    //17
echo decoct(264);    //410
?>
  • deg2rad — 將角度轉換為弧度
<?php
echo deg2rad(45); // 0.785398163397
var_dump(deg2rad(45) === M_PI_4); // bool(true)
?>
  • exp — 計算 e 的指數
<?php
echo exp(12) . ”
“;    //1.6275E+005
echo exp(5.7);    //298.87
?>
  • expm1 — 返回 exp(number) – 1,甚至當 number 的值接近零也能計算出準確結果
  • floor — 捨去法取整
<?php
echo floor(4.3);   // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
?>
  • fmod — 返回除法的浮點數餘數
<?php
$x = 5.7;
$y = 1.3;
$r = fmod($x, $y);
// $r equals 0.5, because 4 * 1.3 + 0.5 = 5.7
?>
  • getrandmax — 顯示隨機數最大的可能值
  • hexdec — 十六進位制轉換為十進位制
  • hypot — 計算一直角三角形的斜邊長度
  • intdiv — Integer division
  • is_finite — 判斷是否為有限值
  • is_infinite — 判斷是否為無限值
  • is_nan — 判斷是否為合法數值
<?php
// Invalid calculation, will return a 
// NaN value
$nan = acos(8);
var_dump($nan, is_nan($nan));
?>
float(NAN)
bool(true)
  • lcg_value — 組合線性同餘發生器
  • log10 — 以 10 為底的對數
  • log1p — 返回 log(1 + number),甚至當 number 的值接近零也能計算出準確結果
  • log — 自然對數
  • max — 找出最大值
<?php
echo max(1, 3, 5, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5
// When `hello` is cast as integer it will be 0. Both the parameters are equally
// long, so the order they are given in determines the result
echo max(0, `hello`);     // 0
echo max(`hello`, 0);     // hello
echo max(`42`, 3); // `42`
// Here 0 > -1, so `hello` is the return value.
echo max(-1, `hello`);    // hello
// With multiple arrays of different lengths, max returns the longest
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)
// 對多個陣列,max 從左向右比較。
   // 因此在本例中:2 == 2,但 4 < 5
$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
// 如果同時給出陣列和非陣列作為引數,則總是將陣列視為
   // 最大值返回
$val = max(`string`, array(2, 5, 7), 42);   // array(2, 5, 7)
?>
  • min — 找出最小值
<?php
echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2
echo min(0, `hello`);     // 0
echo min(`hello`, 0);     // hello
echo min(`hello`, -1);    // -1
// 對多個陣列,min 從左向右比較。
// 因此在本例中:2 == 2,但 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
// 如果同時給出陣列和非陣列作為引數,則不可能返回陣列,因為
// 陣列被視為最大的
$val = min(`string`, array(2, 5, 7), 42);   // string
?>
<?php
function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max – $min);
}
var_dump(randomFloat());
var_dump(randomFloat(2, 20));
?>
float(0.91601131712832)
float(16.511210331931)
  • mt_rand — 生成更好的隨機數
如果沒有提供可選引數 min 和 max,mt_rand() 返回 0 到 mt_getrandmax() 之間的偽隨機數。例如想要 5 到 15(包括 5 和 15)之間的隨機數,用 mt_rand(5, 15)。引數:
min

可選的、返回的最小值(預設:0)

max

可選的、返回的最大值(預設:mt_getrandmax()

返回值:返回 min (或者 0) 到 max (或者是到 mt_getrandmax() ,包含這個值)之間的隨機整數。

<?php
echo mt_rand() . "
";
echo mt_rand() . "
";
echo mt_rand(5, 15);
?>

以上例程的輸出類似於:

1604716014
1478613278
6
  • mt_srand — 播下一個更好的隨機數發生器種子
用 seed 來給隨機數發生器播種。 沒有設定 seed 引數時,會被設為隨時數。引數:
seed

可選的種子值

返回值:沒有返回值

<?php
// seed with microseconds
function make_seed(){
  list($usec, $sec) = explode(` `, microtime());
  return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>
  • octdec — 八進位制轉換為十進位制
<?php
echo octdec(`77`) . ”
“;    //63
echo octdec(decoct(45));    //45
?>
  • pi — 得到圓周率值
<?php
echo pi(); // 3.1415926535898
echo M_PI; // 3.1415926535898
?>
  • pow — 指數表示式
  • rad2deg — 將弧度數轉換為相應的角度數
<?php
echo rad2deg(M_PI_4); // 45
?>
  • rand — 產生一個隨機整數
<?php
echo rand() . ”
“;    //7771
echo rand() . ”
“;    //22264
echo rand(5, 15);    //11
?>
  • round — 對浮點數進行四捨五入
<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?>
<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9
echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>
  • sin — 正弦
<?php
// 返回值的精度由配置中的 precision 指示確定
echo sin(deg2rad(60));  //  0.866025403 …
echo sin(60);           // -0.304810621 …
?>
  • sinh — 雙曲正弦
  • sqrt — 平方根
<?php
// Precision depends on your precision directive
echo sqrt(9); // 3
echo sqrt(10); // 3.16227766 …
?>
  • srand — 播下隨機數發生器種子
<?php
// seed with microseconds
function make_seed(){
  list($usec, $sec) = explode(` `, microtime());
  return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
$randval = rand();
?>
  • tan — 正切
<?php
echo tan(M_PI_4); // 1
?>
  • tanh — 雙曲正切
———————————————————————————————————————————-
———————————————————————————————————————————-
Date/Time函式:
  • checkdate — 驗證一個格里高裡日期
檢查由引數構成的日期的合法性。如果每個引數都正確定義了則會被認為是有效的。引數:
month

month 的值是從 1 到 12。

day

Day 的值在給定的 month 所應該具有的天數範圍之內,閏年已經考慮進去了。

year

year 的值是從 1 到 32767。

返回值:如果給出的日期有效則返回 TRUE,否則返回 FALSE

<?php
var_dump(checkdate(12, 31, 2000));    //bool(true)
var_dump(checkdate(2, 29, 2001));    //bool(false)
?>

本函式返回預設時區,使用如下“假定”的順序:

  • 用 date_default_timezone_set() 函式設定的時區(如果設定了的話)

  • 僅僅在 PHP 5.4.0 之前: TZ 環境變數(如果非空)

  • date.timezone 配置選項(如果設定了的話)

  • 僅僅在 PHP 5.4.0 之前: 查詢作業系統主機 (如果作業系統支援並允許)。

  • 如果以上選擇都不成功,date_default_timezone_get() 會則返回 UTC 的預設時區。

返回值:返回一個 string
 獲取預設時區:
<?php
date_default_timezone_set(`Europe/London`);
if (date_default_timezone_get()) {
    echo `date_default_timezone_set: ` . date_default_timezone_get() . `<br />`;
}
if (ini_get(`date.timezone`)) {
    echo `date.timezone: ` . ini_get(`date.timezone`);
}
?>
以上例程會輸出:
date_default_timezone_set: Europe/London
date.timezone: Europe/London

獲取一個時區的簡寫:

<?php
date_default_timezone_set(`America/Los_Angeles`);
echo date_default_timezone_get() . ` => ` . date(`e`) . ` => ` . date(`T`);
?>
America/Los_Angeles => America/Los_Angeles => PST
date_default_timezone_set() 設定用於所有日期時間函式的預設時區。引數:
timezone_identifier

時區識別符號, UTC 或 Europe/Lisbon。合法識別符號列表見所支援的時區列表

返回值:如果 timezone_identifier 引數無效則返回 FALSE,否則返回 TRUE

獲取預設時區
<?php
date_default_timezone_set(`America/Los_Angeles`);
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get(`date.timezone`))){
    echo `Script timezone differs from ini-set timezone.`;
} else {
    echo `Script timezone and ini-set timezone match.`;
}
?>
Returns associative array with detailed info about given date.引數:
format

Format accepted by DateTime::createFromFormat().

date

String representing the date.

<?php
$date = “6.1.2009 13:00+01:00”;
print_r(date_parse_from_format(“j.n.Y H:iP”, $date));
?>

  • date_parse — Returns associative array with detailed info about given date
date

Date in format accepted by strtotime().

返回值:Returns array with information about the parsed date on success 或者在失敗時返回 FALSE.

<?php
print_r(date_parse(“2006-12-12 10:00:00.5”));
?>
Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)
  • date_sub — 別名 DateTime::sub
  • date_sun_info — Returns an array with information about sunset/sunrise and twilight begin/end
time    Timestamp.latitude    Latitude in degrees.longitude    Longitude in degrees.返回值:Returns array on success 或者在失敗時返回 FALSE.
<?php
$sun_info = date_sun_info(strtotime(“2006-12-12”), 31.7667, 35.2333);
foreach ($sun_info as $key => $val) {
    echo “$key: ” . date(“H:i:s”, $val) . ”
“;
}
?>
sunrise: 05:52:11
sunset: 15:41:21
transit: 10:46:46
civil_twilight_begin: 05:24:08
civil_twilight_end: 16:09:24
nautical_twilight_begin: 04:52:25
nautical_twilight_end: 16:41:06
astronomical_twilight_begin: 04:21:32
astronomical_twilight_end: 17:12:00
  • date_sunrise — 返回給定的日期與地點的日出時間
date_sunrise() 返回給定的日期(以 timestamp 指定)與地點的日出時間。引數:
timestamp    取 timestamp所在日期的日出時間。format
format 常量
常量
說明
取值舉例
SUNFUNCS_RET_STRING
以 string 格式返回結果
16:46

SUNFUNCS_RET_DOUBLE
以 float 格式返回結果
16.78243132

SUNFUNCS_RET_TIMESTAMP
以 integer 格式(時間戳)返回結果
1095034606

latitude    預設是指北緯。因此如果要指定南緯,必須傳遞一個負值。 參見 date.default_latitudelongitude    預設是指東經。因此如果要指定西經,必須傳遞一個負值。 參見 date.default_longitudezenith    預設: date.sunrise_zenithgmtoffset    單位是小時。返回值:按指定格式 format 返回的日出時間, 或者在失敗時返回 FALSE。<?php
/* 計算葡萄牙里斯本的日出時間
Latitude:  北緯 38.4 度
Longitude: 西經 9 度
Zenith ~= 90
offset: +1 GMT
*/
echo date(“D M d Y”). `, sunrise time : ` .date_sunrise(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1);
?>

Mon Dec 20 2004, sunrise time : 08:54
  • date_sunset — 返回給定的日期與地點的日落時間
date_sunset() 返回給定的日期(以 timestamp 指定)與地點的日落時間。引數:
timestamp    返回給定的日期(以 timestamp 指定)的日落時間。format
format 常量
常量
說明
取值舉例
SUNFUNCS_RET_STRING
以 string 格式返回結果
16:46

SUNFUNCS_RET_DOUBLE
以 float 格式返回結果
16.78243132

SUNFUNCS_RET_TIMESTAMP
以 integer 格式(時間戳)返回結果
1095034606

latitude    預設是指北緯。因此如果要指定南緯,必須傳遞一個負值。參見: date.default_latitudelongitude    預設是指東經。因此如果要指定西經,必須傳遞一個負值。參見: date.default_longitudezenith    預設: date.sunset_zenithgmtoffset    單位是小時。返回值:用指定的格式 format 返回日落時間, 或者在失敗時返回 FALSE。<?php
/* calculate the sunset time for Lisbon, Portugal
Latitude: 38.4 North
Longitude: 9 West
Zenith ~= 90
offset: +1 GMT
*/
echo date(“D M d Y”). `, sunset time : ` .date_sunset(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1);
?>

Mon Dec 20 2004, sunset time : 18:13
返回將整數 timestamp 按照給定的格式字串而產生的字串。如果沒有給出時間戳則使用本地當前時間。換句話說,timestamp 是可選的,預設值為 time()
date() 函式示例:
<?php
// 設定預設時區。PHP 5.1 之後版本可用
date_default_timezone_set(`UTC`);
// 輸出類似: Monday
echo date(“l”);
// 輸出類似:Monday 8th of August 2005 03:12:46 PM
echo date(`l jS of F Y h:i:s A`);
// 輸出:July 1, 2000 is on a Saturday
echo “July 1, 2000 is on a ” . date(“l”, mktime(0, 0, 0, 7, 1, 2000));
/* 使用格式常量 */
// 輸出類似: Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);
// 輸出類似:2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>
對 date() 函式中的格式字串進行轉義:
<?php
// 輸出類似: Wednesday the 15th
echo date(`l  he jS`);
?>
date() 和 mktime() 聯合使用示例:
<?php
$tomorrow  = mktime(0, 0, 0, date(“m”)  , date(“d”)+1, date(“Y”));
$lastmonth = mktime(0, 0, 0, date(“m”)-1, date(“d”),   date(“Y”));
$nextyear  = mktime(0, 0, 0, date(“m”),   date(“d”),   date(“Y”)+1);
?>
date() 函式格式化:
<?php
// 假設今天是 2001 年 3 月 10 日下午 5 點 16 分 18 秒,
// 並且位於山區標準時間(MST)時區
$today = date(“F j, Y, g:i a”);                 // March 10, 2001, 5:16 pm
$today = date(“m.d.y”);                         // 03.10.01
$today = date(“j, n, Y”);                       // 10, 3, 2001
$today = date(“Ymd”);                           // 20010310
$today = date(`h-i-s, j-m-y, it is w Day`);     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date(`i  is  he jS day.`);   // it is the 10th day.
$today = date(“D M j G:i:s T Y”);               // Sat Mar 10 17:16:18 MST 2001
$today = date(`H:m:s m is mo
h`);     // 17:03:18 m is month
$today = date(“H:i:s”);                         // 17:16:18
?>
  • getdate — 取得日期/時間資訊
返回一個根據 timestamp 得出的包含有日期資訊的關聯陣列 array。如果沒有給出時間戳則認為是當前本地時間。引數:
timestamp

可選的 timestamp 引數是一個 integer 的 Unix 時間戳,如未指定,引數值預設為當前本地時間。也就是說,其值預設為 time() 的返回值。

返回值:返回一個根據 timestamp 得出的包含有日期資訊的關聯陣列 array。 

<?php
$today = getdate();
print_r($today);
?>
Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Tuesday
    [month]   => June
    [0]       => 1055901520
)
本函式是 gettimeofday(2) 的介面。返回一個關聯陣列,包含有系統呼叫返回的資料。引數:
return_float

當其設為 TRUE 時,會返回一個浮點數而不是一個陣列。

返回值:預設返回一個 array。如果 return_float 設定了則會返回一個 float

陣列中的鍵為:

  • “sec” – 自 Unix 紀元起的秒數
  • “usec” – 微秒數
  • “minuteswest” – 格林威治向西的分鐘數
  • “dsttime” – 夏令時修正的型別
<?php
print_r(gettimeofday());
echo gettimeofday(true);
?>
Array
(
    [sec] => 1073504408
    [usec] => 238215
    [minuteswest] => 0
    [dsttime] => 1
)

1073504408.23910
  • gmdate — 格式化一個 GMT/UTC 日期/時間
同 date() 函式完全一樣,只除了返回的時間是格林威治標準時(GMT)。例如當在中國(GMT +0800)執行以下程式時,第一行顯示“Jan 01 2000 00:00:00”而第二行顯示“Dec 31 1999 16:00:00”。
<?php
echo date(“M d Y H:i:s”, mktime (0,0,0,1,1,2000));
echo gmdate(“M d Y H:i:s”, mktime (0,0,0,1,1,2000));
?>
  • gmmktime — 取得 GMT 日期的 UNIX 時間戳

和 mktime() 完全一樣,只除了返回值是格林威治標準時的時間戳。

引數總是表示 GMT 日期,因此 is_dst 對結果沒有影響。

和 mktime() 一樣,引數可以從右到左依次空著,空著的引數會被設為相應的當前 GMT 值。

  • gmstrftime — 根據區域設定格式化 GMT/UTC 時間/日期
和 strftime() 的行為相同,只除了返回時間是格林威治標準時(GMT)。例如,當在東部標準時(EST,GMT -500)執行時,下面第一行顯示“Dec 31 1998 20:00:00”,而第二行顯示“Jan 01 1999 01:00:00”。
<?php
setlocale(LC_TIME, `en_US`);
echo strftime(“%b %d %Y %H:%M:%S”, mktime (20,0,0,12,31,98)).”
“;
echo gmstrftime(“%b %d %Y %H:%M:%S”, mktime (20,0,0,12,31,98)).”
“;
?>
  • idate — 將本地時間日期格式化為整數

根據給定的格式字元對 timestamp 格式化並返回數字結果。timestamp 為可選項,預設值為本地當前時間,即time() 的值。

和 date() 不同,idate() 只接受一個字元作為 format 引數。


<?php
$timestamp = strtotime(`1st January 2004`); //1072915200
// 下面以兩位數字格式顯示年份,但是因為
// 以“0”打頭,因此只會顯示“4”
echo idate(`y`, $timestamp);
?>

localtime() 函式返回一個陣列,其結構和 C 函式呼叫返回的完全一樣。引數:
timestamp

可選的 timestamp 引數是一個 integer 的 Unix 時間戳,如未指定,引數值預設為當前本地時間。也就是說,其值預設為 time() 的返回值。

is_associative

如果設為 FALSE 或未提供則返回的是普通的數字索引陣列。如果該引數設為 TRUE 則 localtime() 函式返回包含有所有從 C 的 localtime 函式呼叫所返回的不同單元的關聯陣列。關聯陣列中不同的鍵名為:

  • “tm_sec” – 秒數, 0 到 59
  • “tm_min” – 分鐘數, 0 到 59
  • “tm_hour” – 小時, 0 到 23
  • “tm_mday” – 月份中的第幾日, 1 到 31
  • “tm_mon” – 年份中的第幾個月, 0 (Jan) 到 11 (Dec)
  • “tm_year” – 年份,從 1900 開始
  • “tm_wday” – 星期中的第幾天, 0 (Sun) 到 6 (Sat)
  • “tm_yday” – 一年中的第幾天, 0 到 365
  • “tm_isdst” – 夏令時當前是否生效? 如果是生效的是正數, 0 代表未生效,負數代表未知。
<?php
$localtime = localtime();
$localtime_assoc = localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>
  • microtime — 返回當前 Unix 時間戳和微秒數

microtime() 當前 Unix 時間戳以及微秒數。本函式僅在支援 gettimeofday() 系統呼叫的作業系統下可用。

如果呼叫時不帶可選引數,本函式以 “msec sec” 的格式返回一個字串,其中 sec 是自 Unix 紀元(0:00:00 January 1, 1970 GMT)起到現在的秒數,msec 是微秒部分。字串的兩部分都是以秒為單位返回的。

如果給出了 get_as_float 引數並且其值等價於 TRUE,microtime() 將返回一個浮點數。

用 microtime() 對指令碼的執行計時

<?php
/**
 * Simple function to replicate PHP 5 behaviour
 */
function microtime_float(){
    list($usec, $sec) = explode(” “, microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
// Sleep for a while
usleep(100);
$time_end = microtime_float();
$time = $time_end – $time_start;
echo “Did nothing in $time seconds
“;
?>
  • mktime — 取得一個日期的 Unix 時間戳
根據給出的引數返回 Unix 時間戳。時間戳是一個長整數,包含了從 Unix 紀元(January 1 1970 00:00:00 GMT)到給定時間的秒數。引數可以從右向左省略,任何省略的引數會被設定成本地日期和時間的當前值。
mktime() 例子:mktime() 在做日期計算和驗證方面很有用,它會自動計算超出範圍的輸入的正確值。例如下面例子中每一行都會產生字串 “Jan-01-1998″。
<?php
echo date(“M-d-Y”, mktime(0, 0, 0, 12, 32, 1997));
echo date(“M-d-Y”, mktime(0, 0, 0, 13, 1, 1997));
echo date(“M-d-Y”, mktime(0, 0, 0, 1, 1, 1998));
echo date(“M-d-Y”, mktime(0, 0, 0, 1, 1, 98));
?>
下個月的最後一天:任何給定月份的最後一天都可以被表示為下個月的第 “0” 天,而不是 -1 天。下面兩個例子都會產生字串 “The last day in Feb 2000 is: 29″。
<?php
$lastday = mktime(0, 0, 0, 3, 0, 2000);
echo strftime(“Last day in Feb 2000 is: %d”, $lastday);
$lastday = mktime(0, 0, 0, 4, -31, 2000);
echo strftime(“Last day in Feb 2000 is: %d”, $lastday);
?>
  • strftime — 根據區域設定格式化本地時間/日期
返回值:根據指定的 timestamp 或未給出 timestamp 是使用當前本地時間, 返回 format 格式化的字元。 月份、星期名和其他與語言相關的字串遵守 setlocale() 設定的當前區域設定。
  • strptime — 解析由 strftime 生成的日期/時間

strptime() 返回一個將 date 解析後的陣列,如果出錯返回 FALSE

月份和星期幾的名字以及其它與語種有關的字串對應於 setlocale()設定的當前區域(LC_TIME)。引數:

datestring

被解析的字串(例如從 strftime() 返回的)

formatstring

date 所使用的格式(例如同 strftime() 中所使用的相同)。

返回值:返回一個陣列 或者在失敗時返回 FALSE

鍵名 說明
tm_sec 當前分鐘內的秒數(0-61)
tm_min 當前小時內的分鐘數(0-59)
tm_hour 午夜起的小時數(0-23)
tm_mday 月份中的第幾天(1-31)
tm_mon 自一月起過了幾個月(0-11)
tm_year 自 1900 年起過了幾年
tm_wday 自星期天起過了幾天(0-6)
tm_yday 本年自一月一日起過了多少天(0-365)
unparsed date 中未能通過指定的 format 識別的部分
<?php
$format = `%d/%m/%Y %H:%M:%S`;
$strf = strftime($format);
echo "$strf
";
print_r(strptime($strf, $format));
?>
03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)
  • strtotime — 將任何英文文字的日期時間描述解析為 Unix 時間戳
本函式預期接受一個包含美國英語日期格式的字串並嘗試將其解析為 Unix 時間戳(自 January 1 1970 00:00:00 GMT 起的秒數),其值相對於 now 引數給出的時間,如果沒有提供此引數則用系統當前時間。引數
time

日期/時間字串。正確格式的說明詳見 日期與時間格式

now

用來計算返回值的時間戳。

返回值:成功則返回時間戳,否則返回 FALSE。在 PHP 5.1.0 之前本函式在失敗時返回 -1

strtotime() 例子:
<?php
echo strtotime(“now”), ”
“;
echo strtotime(“10 September 2000″), ”
“;
echo strtotime(“+1 day”), ”
“;
echo strtotime(“+1 week”), ”
“;
echo strtotime(“+1 week 2 days 4 hours 2 seconds”), ”
“;
echo strtotime(“next Thursday”), ”
“;
echo strtotime(“last Monday”), ”
“;
?>
 失敗檢查:
<?php
$str = `Not Good`;
// previous to PHP 5.1.0 you would compare with -1, instead of false
if (($timestamp = strtotime($str)) === false) {
    echo “The string ($str) is bogus”;
} else {
    echo “$str == ” . date(`l dS of F Y h:i:s A`, $timestamp);
}
?>
  • time — 返回當前的 Unix 時間戳
返回自從 Unix 紀元(格林威治時間 1970 年 1 月 1 日 00:00:00)到當前時間的秒數。
<?php
$nextWeek = time() + (7 * 24 * 60 * 60);
                   // 7 days; 24 hours; 60 mins; 60secs
echo `Now:       `. date(`Y-m-d`) .”
“;
echo `Next Week: `. date(`Y-m-d`, $nextWeek) .”
“;
// or using strtotime():
echo `Next Week: `. date(`Y-m-d`, strtotime(`+1 week`)) .”
“;
?>
Now:       2005-03-30
Next Week: 2005-04-06
Next Week: 2005-04-06
Returns the current version of the timezonedb.
返回值:Returns a string.
<?php
echo timezone_version_get();
?>
 
 
 
標籤: php


相關文章