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

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

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

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

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

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

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

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

配置

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

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ù)庫用戶名
      'password' => '', //數(shù)據(jù)庫密碼
      'charset' => 'utf8',
    ],
  ],
  // ...
];

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

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

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

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

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

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', 
    ],
  ],
  // ...
];

在代碼中通過以下方式使用:

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

如果不想定義數(shù)據(jù)庫連接為全局應(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 方法,這些方法會根據(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ù)時間都使用以下語法來安全地引用表名和列名:

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

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

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

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

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

手工引用表名和列名的另一個選擇是使用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ù)處理語句

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

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

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

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

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

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

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

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

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

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

如需要也可以嵌套多個事務(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ù)庫必須支持Savepoints才能正確地執(zhí)行,以上代碼在所有關(guān)系數(shù)據(jù)中都可以執(zhí)行,但是只有支持Savepoints才能保證安全性。
Yii 也支持為事務(wù)設(shè)置隔離級別isolation levels,當執(zhí)行事務(wù)時會使用數(shù)據(jù)庫默認的隔離級別,你也可以為事物指定隔離級別. Yii 提供了以下常量作為常用的隔離級別

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

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

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

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

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

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

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

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

[
  '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'],
  ],
]

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

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

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

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

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

注意:在上述配置中,每個從服務(wù)器連接超時時間被指定為10s. 如果在10s內(nèi)不能連接,則被認為該服務(wù)器已經(jīng)掛掉.你也可以自定義超時參數(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個主服務(wù)器和4個從服務(wù)器.Connection組件也支持主服務(wù)器的負載均衡和故障轉(zhuǎn)移,與從服務(wù)器不同的是,如果所有主服務(wù)器都不可用,則會拋出異常.

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

// 在主服務(wù)器連接上開始事務(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();

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

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

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

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

你可以通過 yii\db\Schema實例來獲取Schema信息:

$schema = $connection->getSchema();

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

$tables = $schema->getTableNames();

更多信息請參考yii\db\Schema

修改模式

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

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

使用示例:

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

完整參考請查看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');

--------------------------------手寫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事件機制
  • 全面解讀PHP的Yii框架中的日志功能
  • Yii使用find findAll查找出指定字段的實現(xiàn)方法
  • 解析yii數(shù)據(jù)庫的增刪查改
  • Yii PHP Framework實用入門教程(詳細介紹)
  • 詳解PHP的Yii框架中組件行為的屬性注入和方法注入

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗證來源與類型、控制文件名與路徑、設(shè)置服務(wù)器限制并二次處理媒體文件。1.驗證上傳來源通過token防止CSRF并通過finfo_file檢測真實MIME類型使用白名單控制;2.重命名文件為隨機字符串并根據(jù)檢測類型決定擴展名存儲至非Web目錄;3.PHP配置限制上傳大小及臨時目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫重新保存圖片清除潛在惡意數(shù)據(jù)。

您如何按值與PHP中的參考傳遞變量? 您如何按值與PHP中的參考傳遞變量? Jul 08, 2025 am 02:42 AM

InPHP,variablesarepassedbyvaluebydefault,meaningfunctionsorassignmentsreceiveacopyofthedata,whilepassingbyreferenceallowsmodificationstoaffecttheoriginalvariable.1.Whenpassingbyvalue,changestothecopydonotimpacttheoriginal,asshownwhenassigning$b=$aorp

PHP找到了最后一次發(fā)生的位置 PHP找到了最后一次發(fā)生的位置 Jul 09, 2025 am 02:49 AM

在PHP中查找子字符串最后一次出現(xiàn)的位置,最直接的方法是使用strrpos()函數(shù)。1.使用strrpos()函數(shù)可直接獲取子字符串在主字符串中最后一次出現(xiàn)的起始位置索引,若未找到則返回false,語法為strrpos($haystack,$needle,$offset=0)。2.若需忽略大小寫,可使用strripos()函數(shù)實現(xiàn)不區(qū)分大小寫的查找。3.對于中文等多字節(jié)字符,應(yīng)使用mbstring擴展中的mb_strrpos()函數(shù)以確保返回字符位置而非字節(jié)位置。4.注意strrpos()返回f

PHP標頭位置AJAX調(diào)用不起作用 PHP標頭位置AJAX調(diào)用不起作用 Jul 10, 2025 pm 01:46 PM

AJAX請求中header('Location:...')無效的原因是瀏覽器不會自動執(zhí)行頁面跳轉(zhuǎn)。因為在AJAX請求中,服務(wù)器返回的302狀態(tài)碼和Location頭信息會被作為響應(yīng)數(shù)據(jù)處理,而不是觸發(fā)跳轉(zhuǎn)行為。解決方法有:1.在PHP中返回JSON數(shù)據(jù)包含跳轉(zhuǎn)URL;2.在前端AJAX回調(diào)中檢查redirect字段并用window.location.href手動跳轉(zhuǎn);3.確保PHP輸出僅為JSON避免解析失??;4.處理跨域問題需設(shè)置合適的CORS頭;5.防止緩存干擾可加時間戳或設(shè)置cache:f

如何在YII中創(chuàng)建基本路線? 如何在YII中創(chuàng)建基本路線? Jul 09, 2025 am 01:15 AM

TocreateabasicrouteinYii,firstsetupacontrollerbyplacingitinthecontrollersdirectorywithpropernamingandclassdefinitionextendingyii\web\Controller.1)Createanactionwithinthecontrollerbydefiningapublicmethodstartingwith"action".2)ConfigureURLstr

發(fā)電機如何在PHP中工作? 發(fā)電機如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

Windows自動維修環(huán)修復(fù) Windows自動維修環(huán)修復(fù) Jul 07, 2025 am 01:31 AM

使用安裝介質(zhì)進入恢復(fù)環(huán)境;2.運行bootrec命令修復(fù)引導記錄;3.檢查磁盤錯誤并修復(fù)系統(tǒng)文件;4.禁用自動修復(fù)作為臨時手段。Windows自動修復(fù)循環(huán)通常由系統(tǒng)文件損壞、硬盤錯誤或啟動配置異常引起,解決方法包括通過安裝U盤進入恢復(fù)環(huán)境執(zhí)行疑難解答、使用bootrec修復(fù)MBR和BCD、運行chkdsk與DISM/sfc修復(fù)磁盤及系統(tǒng)文件,若無效可臨時禁用自動修復(fù)功能,但需后續(xù)排查根本原因確保硬盤與引導結(jié)構(gòu)正常。

mysql結(jié)合功能 mysql結(jié)合功能 Jul 09, 2025 am 01:09 AM

COALESCE函數(shù)用于返回參數(shù)列表中第一個非空值,適用于處理NULL數(shù)據(jù)。1.基本用法是替換NULL值,例如用默認聯(lián)系方式替代空字段;2.可用于聚合查詢中設(shè)置默認值,確保無數(shù)據(jù)時返回0而非NULL;3.可與其他函數(shù)如NULLIF、IFNULL配合使用,增強數(shù)據(jù)清洗和邏輯判斷能力。

See all articles