国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
PHP的Yii框架中使用數(shù)據(jù)庫(kù)的配置和SQL操作實(shí)例教程,yii實(shí)例教程
您可能感興趣的文章:
首頁(yè) 后端開(kāi)發(fā) php教程 PHP的Yii框架中使用數(shù)據(jù)庫(kù)的配置和SQL操作實(shí)例教程,yii實(shí)例教程_PHP教程

PHP的Yii框架中使用數(shù)據(jù)庫(kù)的配置和SQL操作實(shí)例教程,yii實(shí)例教程_PHP教程

Jul 12, 2016 am 08:56 AM
mongodb php yii

PHP的Yii框架中使用數(shù)據(jù)庫(kù)的配置和SQL操作實(shí)例教程,yii實(shí)例教程

數(shù)據(jù)庫(kù)訪問(wèn) (DAO)
Yii 包含了一個(gè)建立在 PHP PDO 之上的數(shù)據(jù)訪問(wèn)層 (DAO). DAO為不同的數(shù)據(jù)庫(kù)提供了一套統(tǒng)一的API. 其中ActiveRecord 提供了數(shù)據(jù)庫(kù)與模型(MVC 中的 M,Model) 的交互,QueryBuilder 用于創(chuàng)建動(dòng)態(tài)的查詢語(yǔ)句. DAO提供了簡(jiǎn)單高效的SQL查詢,可以用在與數(shù)據(jù)庫(kù)交互的各個(gè)地方.

Yii 默認(rèn)支持以下數(shù)據(jù)庫(kù) (DBMS):

  • MySQL
  • MariaDB
  • SQLite
  • PostgreSQL
  • CUBRID: 版本 >= 9.3 . (由于PHP PDO 擴(kuò)展的一個(gè)bug 引用值會(huì)無(wú)效,所以你需要在 CUBRID的客戶端和服務(wù)端都使用 9.3 )
  • Oracle
  • MSSQL: 版本>=2005.

配置

開(kāi)始使用數(shù)據(jù)庫(kù)首先需要配置數(shù)據(jù)庫(kù)連接組件,通過(guò)添加 db 組件到應(yīng)用配置實(shí)現(xiàn)("基礎(chǔ)的" Web 應(yīng)用是 config/web.php),DSN( Data Source Name )是數(shù)據(jù)源名稱,用于指定數(shù)據(jù)庫(kù)信息.如下所示:

return [
  // ...
  'components' => [
    // ...
    'db' => [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host=localhost;dbname=mydatabase', // MySQL, MariaDB
      //'dsn' => 'sqlite:/path/to/database/file', // SQLite
      //'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
      //'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
      //'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
      //'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
      //'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
      //'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
      'username' => 'root', //數(shù)據(jù)庫(kù)用戶名
      'password' => '', //數(shù)據(jù)庫(kù)密碼
      'charset' => 'utf8',
    ],
  ],
  // ...
];

請(qǐng)參考PHP manual獲取更多有關(guān) DSN 格式信息。 配置連接組件后可以使用以下語(yǔ)法訪問(wèn):

$connection = \Yii::$app->db;

請(qǐng)參考yii\db\Connection獲取可配置的屬性列表。 如果你想通過(guò)ODBC連接數(shù)據(jù)庫(kù),則需要配置yii\db\Connection::driverName 屬性,例如:

'db' => [
  'class' => 'yii\db\Connection',
  'driverName' => 'mysql',
  'dsn' => 'odbc:Driver={MySQL};Server=localhost;Database=test',
  'username' => 'root',
  'password' => '',
],

注意:如果需要同時(shí)使用多個(gè)數(shù)據(jù)庫(kù)可以定義 多個(gè) 連接組件:

return [
  // ...
  'components' => [
    // ...
    'db' => [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host=localhost;dbname=mydatabase', 
      'username' => 'root',
      'password' => '',
      'charset' => 'utf8',
    ],
    'secondDb' => [
      'class' => 'yii\db\Connection',
      'dsn' => 'sqlite:/path/to/database/file', 
    ],
  ],
  // ...
];

在代碼中通過(guò)以下方式使用:

$primaryConnection = \Yii::$app->db;
$secondaryConnection = \Yii::$app->secondDb;

如果不想定義數(shù)據(jù)庫(kù)連接為全局應(yīng)用組件,可以在代碼中直接初始化使用:

$connection = new \yii\db\Connection([
  'dsn' => $dsn,
   'username' => $username,
   'password' => $password,
]);
$connection->open();

小提示:如果在創(chuàng)建了連接后需要執(zhí)行額外的 SQL 查詢,可以添加以下代碼到應(yīng)用配置文件:

return [
  // ...
  'components' => [
    // ...
    'db' => [
      'class' => 'yii\db\Connection',
      // ...
      'on afterOpen' => function($event) {
        $event->sender->createCommand("SET time_zone = 'UTC'")->execute();
      }
    ],
  ],
  // ...
];

如果執(zhí)行 SQL 不返回任何數(shù)據(jù)可使用命令中的 execute 方法:

$command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');
$command->execute();

你可以使用insert,update,delete 方法,這些方法會(huì)根據(jù)參數(shù)生成合適的SQL并執(zhí)行.

// INSERT
$connection->createCommand()->insert('user', [
  'name' => 'Sam',
  'age' => 30,
])->execute();

// INSERT 一次插入多行
$connection->createCommand()->batchInsert('user', ['name', 'age'], [
  ['Tom', 30],
  ['Jane', 20],
  ['Linda', 25],
])->execute();

// UPDATE
$connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();

// DELETE
$connection->createCommand()->delete('user', 'status = 0')->execute();

引用的表名和列名

大多數(shù)時(shí)間都使用以下語(yǔ)法來(lái)安全地引用表名和列名:

$sql = "SELECT COUNT($column) FROM {{table}}";
$rowCount = $connection->createCommand($sql)->queryScalar();

以上代碼$column 會(huì)轉(zhuǎn)變?yōu)橐们‘?dāng)?shù)牧忻?,而{{table}} 就轉(zhuǎn)變?yōu)橐们‘?dāng)?shù)谋砻?表名有個(gè)特殊的變量 {{%Y}} ,如果設(shè)置了表前綴使用該變體可以自動(dòng)在表名前添加前綴:

$sql = "SELECT COUNT($column) FROM {{%$table}}";
$rowCount = $connection->createCommand($sql)->queryScalar();

如果在配置文件如下設(shè)置了表前綴,以上代碼將在 tbl_table 這個(gè)表查詢結(jié)果:

return [
  // ...
  'components' => [
    // ...
    'db' => [
      // ...
      'tablePrefix' => 'tbl_',
    ],
  ],
];

手工引用表名和列名的另一個(gè)選擇是使用yii\db\Connection::quoteTableName() 和 yii\db\Connection::quoteColumnName():

$column = $connection->quoteColumnName($column);
$table = $connection->quoteTableName($table);
$sql = "SELECT COUNT($column) FROM $table";
$rowCount = $connection->createCommand($sql)->queryScalar();

預(yù)處理語(yǔ)句

為安全傳遞查詢參數(shù)可以使用預(yù)處理語(yǔ)句,首先應(yīng)當(dāng)使用:placeholder占位,再將變量綁定到對(duì)應(yīng)占位符:

$command = $connection->createCommand('SELECT * FROM post WHERE id=:id');
$command->bindValue(':id', $_GET['id']);
$post = $command->query();

另一種用法是準(zhǔn)備一次預(yù)處理語(yǔ)句而執(zhí)行多次查詢:

$command = $connection->createCommand('DELETE FROM post WHERE id=:id');
$command->bindParam(':id', $id);

$id = 1;
$command->execute();

$id = 2;
$command->execute();

提示,在執(zhí)行前綁定變量,然后在每個(gè)執(zhí)行中改變變量的值(一般用在循環(huán)中)比較高效.
事務(wù)

當(dāng)你需要順序執(zhí)行多個(gè)相關(guān)的的query時(shí),你可以把他們封裝到一個(gè)事務(wù)中去保護(hù)數(shù)據(jù)一致性.Yii提供了一個(gè)簡(jiǎn)單的接口來(lái)實(shí)現(xiàn)事務(wù)操作. 如下執(zhí)行 SQL 事務(wù)查詢語(yǔ)句:

$transaction = $connection->beginTransaction();
try {
  $connection->createCommand($sql1)->execute();
   $connection->createCommand($sql2)->execute();
  // ... 執(zhí)行其他 SQL 語(yǔ)句 ...
  $transaction->commit();
} catch(Exception $e) {
  $transaction->rollBack();
}

我們通過(guò)yii\db\Connection::beginTransaction()開(kāi)始一個(gè)事務(wù),通過(guò)try catch 捕獲異常.當(dāng)執(zhí)行成功,通過(guò)yii\db\Transaction::commit()提交事務(wù)并結(jié)束,當(dāng)發(fā)生異常失敗通過(guò)yii\db\Transaction::rollBack()進(jìn)行事務(wù)回滾.

如需要也可以嵌套多個(gè)事務(wù):

// 外部事務(wù)
$transaction1 = $connection->beginTransaction();
try {
  $connection->createCommand($sql1)->execute();

  // 內(nèi)部事務(wù)
  $transaction2 = $connection->beginTransaction();
  try {
    $connection->createCommand($sql2)->execute();
    $transaction2->commit();
  } catch (Exception $e) {
    $transaction2->rollBack();
  }

  $transaction1->commit();
} catch (Exception $e) {
  $transaction1->rollBack();
}

注意你使用的數(shù)據(jù)庫(kù)必須支持Savepoints才能正確地執(zhí)行,以上代碼在所有關(guān)系數(shù)據(jù)中都可以執(zhí)行,但是只有支持Savepoints才能保證安全性。
Yii 也支持為事務(wù)設(shè)置隔離級(jí)別isolation levels,當(dāng)執(zhí)行事務(wù)時(shí)會(huì)使用數(shù)據(jù)庫(kù)默認(rèn)的隔離級(jí)別,你也可以為事物指定隔離級(jí)別. Yii 提供了以下常量作為常用的隔離級(jí)別

  • \yii\db\Transaction::READ_UNCOMMITTED - 允許讀取改變了的還未提交的數(shù)據(jù),可能導(dǎo)致臟讀、不可重復(fù)讀和幻讀
  • \yii\db\Transaction::READ_COMMITTED - 允許并發(fā)事務(wù)提交之后讀取,可以避免臟讀,可能導(dǎo)致重復(fù)讀和幻讀。
  • \yii\db\Transaction::REPEATABLE_READ - 對(duì)相同字段的多次讀取結(jié)果一致,可導(dǎo)致幻讀。
  • \yii\db\Transaction::SERIALIZABLE - 完全服從ACID的原則,確保不發(fā)生臟讀、不可重復(fù)讀和幻讀。

你可以使用以上常量或者使用一個(gè)string字符串命令,在對(duì)應(yīng)數(shù)據(jù)庫(kù)中執(zhí)行該命令用以設(shè)置隔離級(jí)別,比如對(duì)于postgres有效的命令為SERIALIZABLE READ ONLY DEFERRABLE.

注意:某些數(shù)據(jù)庫(kù)只能針對(duì)連接來(lái)設(shè)置事務(wù)隔離級(jí)別,所以你必須要為連接明確制定隔離級(jí)別.目前受影響的數(shù)據(jù)庫(kù):MSSQL SQLite

注意:SQLite 只支持兩種事務(wù)隔離級(jí)別,所以你只能設(shè)置READ UNCOMMITTED 和 SERIALIZABLE.使用其他隔離級(jí)別會(huì)拋出異常.

注意:PostgreSQL 不允許在事務(wù)開(kāi)始前設(shè)置隔離級(jí)別,所以你不能在事務(wù)開(kāi)始時(shí)指定隔離級(jí)別.你可以在事務(wù)開(kāi)始之后調(diào)用yii\db\Transaction::setIsolationLevel() 來(lái)設(shè)置.
關(guān)于隔離級(jí)別[isolation levels]: http://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels

數(shù)據(jù)庫(kù)復(fù)制和讀寫(xiě)分離

很多數(shù)據(jù)庫(kù)支持?jǐn)?shù)據(jù)庫(kù)復(fù)制 http://en.wikipedia.org/wiki/Replication_(computing)#Database_replication">database replication來(lái)提高可用性和響應(yīng)速度. 在數(shù)據(jù)庫(kù)復(fù)制中,數(shù)據(jù)總是從主服務(wù)器 到 從服務(wù)器. 所有的插入和更新等寫(xiě)操作在主服務(wù)器執(zhí)行,而讀操作在從服務(wù)器執(zhí)行.

通過(guò)配置yii\db\Connection可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)復(fù)制和讀寫(xiě)分離.

[
  'class' => 'yii\db\Connection',

  // 配置主服務(wù)器
  'dsn' => 'dsn for master server',
  'username' => 'master',
  'password' => '',

  // 配置從服務(wù)器
  'slaveConfig' => [
    'username' => 'slave',
    'password' => '',
    'attributes' => [
      // use a smaller connection timeout
      PDO::ATTR_TIMEOUT => 10,
    ],
  ],

  // 配置從服務(wù)器組
  'slaves' => [
    ['dsn' => 'dsn for slave server 1'],
    ['dsn' => 'dsn for slave server 2'],
    ['dsn' => 'dsn for slave server 3'],
    ['dsn' => 'dsn for slave server 4'],
  ],
]

以上的配置實(shí)現(xiàn)了一主多從的結(jié)構(gòu),從服務(wù)器用以執(zhí)行讀查詢,主服務(wù)器執(zhí)行寫(xiě)入查詢,讀寫(xiě)分離的功能由后臺(tái)代碼自動(dòng)完成.調(diào)用者無(wú)須關(guān)心.例如:

// 使用以上配置創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
$db = Yii::createObject($config);

// 通過(guò)從服務(wù)器執(zhí)行查詢操作
$rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();

// 通過(guò)主服務(wù)器執(zhí)行更新操作
$db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();

注意:通過(guò)yii\db\Command::execute() 執(zhí)行的查詢被認(rèn)為是寫(xiě)操作,所有使用yii\db\Command來(lái)執(zhí)行的其他查詢方法被認(rèn)為是讀操作.你可以通過(guò)$db->slave得到當(dāng)前正在使用能夠的從服務(wù)器.
Connection組件支持從服務(wù)器的負(fù)載均衡和故障轉(zhuǎn)移,當(dāng)?shù)谝淮螆?zhí)行讀查詢時(shí),會(huì)隨即選擇一個(gè)從服務(wù)器進(jìn)行連接,如果連接失敗則又選擇另一個(gè),如果所有從服務(wù)器都不可用,則會(huì)連接主服務(wù)器。你可以配置yii\db\Connection::serverStatusCache來(lái)記住那些不能連接的從服務(wù)器,使Yii 在一段時(shí)間[[yii\db\Connection::serverRetryInterval].內(nèi)不會(huì)重復(fù)嘗試連接那些根本不可用的從服務(wù)器.

注意:在上述配置中,每個(gè)從服務(wù)器連接超時(shí)時(shí)間被指定為10s. 如果在10s內(nèi)不能連接,則被認(rèn)為該服務(wù)器已經(jīng)掛掉.你也可以自定義超時(shí)參數(shù).
你也可以配置多主多從的結(jié)構(gòu),例如:

[
  'class' => 'yii\db\Connection',

  // 配置主服務(wù)器
  'masterConfig' => [
    'username' => 'master',
    'password' => '',
    'attributes' => [
      // use a smaller connection timeout
      PDO::ATTR_TIMEOUT => 10,
    ],
  ],

  // 配置主服務(wù)器組
  'masters' => [
    ['dsn' => 'dsn for master server 1'],
    ['dsn' => 'dsn for master server 2'],
  ],

  // 配置從服務(wù)器
  'slaveConfig' => [
    'username' => 'slave',
    'password' => '',
    'attributes' => [
      // use a smaller connection timeout
      PDO::ATTR_TIMEOUT => 10,
    ],
  ],

  // 配置從服務(wù)器組
  'slaves' => [
    ['dsn' => 'dsn for slave server 1'],
    ['dsn' => 'dsn for slave server 2'],
    ['dsn' => 'dsn for slave server 3'],
    ['dsn' => 'dsn for slave server 4'],
  ],
]

上述配置制定了2個(gè)主服務(wù)器和4個(gè)從服務(wù)器.Connection組件也支持主服務(wù)器的負(fù)載均衡和故障轉(zhuǎn)移,與從服務(wù)器不同的是,如果所有主服務(wù)器都不可用,則會(huì)拋出異常.

注意:當(dāng)你使用yii\db\Connection::masters來(lái)配置一個(gè)或多個(gè)主服務(wù)器時(shí),Connection中關(guān)于數(shù)據(jù)庫(kù)連接的其他屬性(例如:dsn,username, password)都會(huì)被忽略.
事務(wù)默認(rèn)使用主服務(wù)器的連接,并且在事務(wù)執(zhí)行中的所有操作都會(huì)使用主服務(wù)器的連接,例如:

// 在主服務(wù)器連接上開(kāi)始事務(wù)
$transaction = $db->beginTransaction();

try {
  // 所有的查詢都在主服務(wù)器上執(zhí)行
  $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
  $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();

  $transaction->commit();
} catch(\Exception $e) {
  $transaction->rollBack();
  throw $e;
}

如果你想在從服務(wù)器上執(zhí)行事務(wù)操作則必須要明確地指定,比如:

$transaction = $db->slave->beginTransaction();

有時(shí)你想強(qiáng)制使用主服務(wù)器來(lái)執(zhí)行讀查詢,你可以調(diào)用seMaster()方法.

$rows = $db->useMaster(function ($db) {
  return $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
});

你也可以設(shè)置$db->enableSlaves 為false來(lái)使所有查詢都在主服務(wù)器上執(zhí)行.

  • 操作數(shù)據(jù)庫(kù)模式
  • 獲得模式信息

你可以通過(guò) yii\db\Schema實(shí)例來(lái)獲取Schema信息:

$schema = $connection->getSchema();

該實(shí)例包括一系列方法來(lái)檢索數(shù)據(jù)庫(kù)多方面的信息:

$tables = $schema->getTableNames();

更多信息請(qǐng)參考yii\db\Schema

修改模式

除了基礎(chǔ)的 SQL 查詢,yii\db\Command還包括一系列方法來(lái)修改數(shù)據(jù)庫(kù)模式:

  • 創(chuàng)建/重命名/刪除/清空表
  • 增加/重命名/刪除/修改字段
  • 增加/刪除主鍵
  • 增加/刪除外鍵
  • 創(chuàng)建/刪除索引

使用示例:

// 創(chuàng)建表
$connection->createCommand()->createTable('post', [
  'id' => 'pk',
  'title' => 'string',
  'text' => 'text',
]);

完整參考請(qǐng)查看yii\db\Command.

SQL查詢示例:

// find the customers whose primary key value is 10
$customers = Customer::findAll(10);
$customer = Customer::findOne(10);

// the above code is equivalent to:
$customers = Customer::find()->where(['id' => 10])->all();

// find the customers whose primary key value is 10, 11 or 12.
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where(['IN','id',[10,11,12]])->all();

// the above code is equivalent to:
$customers = Customer::find()->where(['id' => [10, 11, 12]])->all();

// find customers whose age is 30 and whose status is 1
$customers = Customer::findAll(['age' => 30, 'status' => 1]);

// the above code is equivalent to:
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();

// use params binding
$customers = Customer::find()->where('age=:age AND status=:status')->addParams([':age'=>30,':status'=>1])->all();

// use index
$customers = Customer::find()->indexBy('id')->where(['age' => 30, 'status' => 1])->all();

// get customers count
$count = Customer::find()->where(['age' => 30, 'status' => 1])->count();

// add addition condition
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->andWhere('score > 100')->orderBy('id DESC')->offset(5)->limit(10)->all();

// find by sql
$customers = Customer::findBySql('SELECT * FROM customer WHERE age=30 AND status=1 AND score>100 ORDER BY id DESC LIMIT 5,10')->all();

修改:

// update status for customer-10
$customer = Customer::findOne(10);
$customer->status = 1;
$customer->update();

// the above code is equivalent to:
Customer::updateAll(['status' => 1], 'id = :id',[':id'=>10]);

刪除:

// delete customer-10
Customer::findOne(10)->delete();

// the above code is equivalent to:
Customer::deleteAll(['status' => 1], 'id = :id',[':id'=>10]);

--------------------------------使用子查詢------------------------------------------

$subQuery = (new Query())->select('COUNT(*)')->from('customer');

// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');

--------------------------------手寫(xiě)SQL-------------------------------------------

// select
$customers = Yii::$app->db->createCommand('SELECT * FROM customer')->queryAll();

// update
Yii::$app->db->createCommand()->update('customer',['status'=>1],'id=10')->execute();

// delete
Yii::$app->db->createCommand()->delete('customer','id=10')->execute();

//transaction
// outer 
$transaction1 = $connection->beginTransaction();
try {
  $connection->createCommand($sql1)->execute();

  // internal
  $transaction2 = $connection->beginTransaction();
  try {
    $connection->createCommand($sql2)->execute();
    $transaction2->commit();
  } catch (Exception $e) {
    $transaction2->rollBack();
  }

  $transaction1->commit();
} catch (Exception $e) {
  $transaction1->rollBack();
}

-----------------------------主從配置--------------------------------------------

[
  'class' => 'yii\db\Connection',

  // master 
  'dsn' => 'dsn for master server',
  'username' => 'master',
  'password' => '',

  // slaves
  'slaveConfig' => [
    'username' => 'slave',
    'password' => '',
    'attributes' => [
      // use a smaller connection timeout
      PDO::ATTR_TIMEOUT => 10,
    ],
  ],

  'slaves' => [
    ['dsn' => 'dsn for slave server 1'],
    ['dsn' => 'dsn for slave server 2'],
    ['dsn' => 'dsn for slave server 3'],
    ['dsn' => 'dsn for slave server 4'],
  ],
]

您可能感興趣的文章:

  • PHP的Yii框架中移除組件所綁定的行為的方法
  • PHP的Yii框架中行為的定義與綁定方法講解
  • 詳解在PHP的Yii框架中使用行為Behaviors的方法
  • 深入講解PHP的Yii框架中的屬性(Property)
  • 深入解析PHP的Yii框架中的event事件機(jī)制
  • 全面解讀PHP的Yii框架中的日志功能
  • Yii使用find findAll查找出指定字段的實(shí)現(xiàn)方法
  • 解析yii數(shù)據(jù)庫(kù)的增刪查改
  • Yii PHP Framework實(shí)用入門(mén)教程(詳細(xì)介紹)
  • 詳解PHP的Yii框架中組件行為的屬性注入和方法注入

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111911.htmlTechArticlePHP的Yii框架中使用數(shù)據(jù)庫(kù)的配置和SQL操作實(shí)例教程,yii實(shí)例教程 數(shù)據(jù)庫(kù)訪問(wèn) (DAO) Yii 包含了一個(gè)建立在 PHP PDO 之上的數(shù)據(jù)訪問(wèn)層 (DAO). DAO為...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

如何快速測(cè)試PHP代碼片段? 如何快速測(cè)試PHP代碼片段? Jun 25, 2025 am 12:58 AM

toquicklytestaphpcodesnippet,useanonlinephpsandboxlike3v4l.orgorphpize.onlineforinstantantantExecutionWithOutSetup; runco??delocalocallocallocallocallocallocallywithpplibycreatinga.phpfileandexecutingitviateringitviatheterminal;

如何防止PHP中的跨站點(diǎn)偽造偽造(CSRF)攻擊? 如何防止PHP中的跨站點(diǎn)偽造偽造(CSRF)攻擊? Jun 28, 2025 am 02:25 AM

TopreventCSRFattacksinPHP,implementanti-CSRFtokens.1)Generateandstoresecuretokensusingrandom_bytes()orbin2hex(random_bytes(32)),savethemin$_SESSION,andincludetheminformsashiddeninputs.2)ValidatetokensonsubmissionbystrictlycomparingthePOSTtokenwiththe

如何升級(jí)PHP版本? 如何升級(jí)PHP版本? Jun 27, 2025 am 02:14 AM

升級(jí)PHP版本其實(shí)不難,但關(guān)鍵在于操作步驟和注意事項(xiàng)。以下是具體方法:1.確認(rèn)當(dāng)前PHP版本及運(yùn)行環(huán)境,使用命令行或phpinfo.php文件查看;2.選擇適合的新版本并安裝,推薦8.2或8.1,Linux用戶用包管理器安裝,macOS用戶用Homebrew;3.遷移配置文件和擴(kuò)展,更新php.ini并安裝必要擴(kuò)展;4.測(cè)試網(wǎng)站是否正常運(yùn)行,檢查錯(cuò)誤日志確保無(wú)兼容性問(wèn)題。按照這些步驟操作,大多數(shù)情況都能順利完成升級(jí)。

PHP初學(xué)者指南:當(dāng)?shù)丨h(huán)境配置的詳細(xì)說(shuō)明 PHP初學(xué)者指南:當(dāng)?shù)丨h(huán)境配置的詳細(xì)說(shuō)明 Jun 27, 2025 am 02:09 AM

要設(shè)置PHP開(kāi)發(fā)環(huán)境,需選擇合適的工具并正確安裝配置。①最基礎(chǔ)的PHP本地環(huán)境需要三個(gè)組件:Web服務(wù)器(Apache或Nginx)、PHP本身和數(shù)據(jù)庫(kù)(如MySQL/MariaDB);②推薦初學(xué)者使用集成包如XAMPP或MAMP,它們簡(jiǎn)化了安裝流程,XAMPP適用于Windows和macOS,安裝后將項(xiàng)目文件放入htdocs目錄并通過(guò)localhost訪問(wèn);③MAMP適合Mac用戶,支持便捷切換PHP版本,但免費(fèi)版功能有限;④高級(jí)用戶可用Homebrew手動(dòng)安裝,在macOS/Linux系統(tǒng)中

如何使用PHP退出功能? 如何使用PHP退出功能? Jul 03, 2025 am 02:15 AM

exit()是PHP中用于立即終止腳本執(zhí)行的函數(shù),常見(jiàn)用途包括:1.在檢測(cè)到異常情況時(shí)提前終止腳本,如文件不存在或驗(yàn)證失??;2.調(diào)試時(shí)輸出中間結(jié)果并停止執(zhí)行;3.結(jié)合header()重定向后調(diào)用exit()防止后續(xù)代碼執(zhí)行;此外,exit()可接受字符串參數(shù)作為輸出內(nèi)容或整數(shù)作為狀態(tài)碼,其別名為die()。

如何將兩個(gè)PHP陣列組合獨(dú)特的值? 如何將兩個(gè)PHP陣列組合獨(dú)特的值? Jul 02, 2025 pm 05:18 PM

要合并兩個(gè)PHP數(shù)組并保留唯一值,有兩種主要方法。1.對(duì)于索引數(shù)組或僅需值去重的情況,使用array_merge和array_unique組合:先用array_merge($array1,$array2)合并數(shù)組,再用array_unique()去重,最終得到包含所有唯一值的新數(shù)組;2.對(duì)于關(guān)聯(lián)數(shù)組且希望保留第一個(gè)數(shù)組中的鍵值對(duì)時(shí),使用 運(yùn)算符:$result=$array1 $array2,這將確保第一個(gè)數(shù)組中的鍵不會(huì)被第二個(gè)數(shù)組覆蓋。這兩種方法分別適用于不同場(chǎng)景,根據(jù)是否需要保留鍵名或只關(guān)注

PHP本地開(kāi)發(fā)環(huán)境設(shè)置:最簡(jiǎn)單的方法 PHP本地開(kāi)發(fā)環(huán)境設(shè)置:最簡(jiǎn)單的方法 Jun 26, 2025 am 01:12 AM

tosetupalocalphpdevelopmentenvironmentsquickly,usexamppforsimplicity.1.DownloadAndAndAndInstallXamppForyouRos.2.startapacheandmysqlv IATHEXAMPPCONTROLPANEL.3.PLACEPHPFILESINTHEHTDOCSFOLDERTOACCESSTHEMATHTP://localhost/your-folder-name.4.4.4.4.4.formacos,Considermam

See all articles