php & mysql三日通 2
Jun 21, 2016 am 09:15 AMmysql
一、 while循環(huán)
在這一課里,我們將會繼續(xù)深入下去,使用PHP和MySQL來寫出一些簡單而有用的頁面。我們從昨天創(chuàng)建的數(shù)據(jù)庫開始,顯示庫中的數(shù)據(jù),但是會再稍微加以潤色。
首先,我們用下面的代碼來查詢數(shù)據(jù)庫內(nèi)容。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
echo "
姓名 | 職位 |
%s %s | %s |
?>
您可能已經(jīng)注意到,我們在這個程序里加進(jìn)了一些新東西。最明顯的是while()循環(huán)。該循環(huán)是說,只要數(shù)據(jù)庫里還有記錄可讀(使用mysql_fetch_row()函數(shù)),那就把該記錄賦給變量$myrow,然后執(zhí)行大括號({})內(nèi)的指令。仔細(xì)看一下這里,這部分是比較重要的。
我們應(yīng)該注意一下mysql_fetch_row()函數(shù)。這里有一點小問題,它返回的是一個數(shù)組,必須以數(shù)組下標(biāo)來訪問其中的某個字段。第一個字段下標(biāo)為0,第二個是1,依此類推。在執(zhí)行某些復(fù)雜查詢時,這么做簡直實在是太煩瑣了。
現(xiàn)在我們更仔細(xì)地研究一下循環(huán)過程。程序前幾行我們在第一課的例子中已經(jīng)看到過了。然后,在while()循環(huán)中,我們從查詢結(jié)果中讀取一條記錄并把該記錄賦給數(shù)組$myrow。接著,我們用printf函數(shù)把數(shù)據(jù)中的內(nèi)容顯示在屏幕上。隨后,循環(huán)反復(fù)執(zhí)行,讀取下一條記錄賦給$myrow。這樣繼續(xù)下去,直到所有記錄都已被讀取完為止。
使用while()循環(huán)的一個好處是,如果數(shù)據(jù)庫查詢沒有返回任何記錄,那您也不會收到錯誤信息。在剛執(zhí)行循環(huán)語句時,循環(huán)條件就不滿足,不會有任何數(shù)據(jù)賦給$myrow,程序就直接往下運行了。
但是如果查詢未返回任何數(shù)據(jù),我們怎么讓用戶知道這一點呢?我們也許該提供點兒相關(guān)的消息給用戶吧。這是可以做到的,下面我們就看看怎么做。>>
二、 if-else
請看下面的程序。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "
姓名 | 住址 |
%s %s | %s |
} else {
echo "對不起,沒有找到記錄!";
}
?>
這段程序中包含有不少新內(nèi)容,不過這些內(nèi)容都相當(dāng)簡單。首先是mysql_fetch_array()函數(shù)。該函數(shù)與mysql_fetch_row()十分相近,只有一點不同:使用這個函數(shù)時,我們可以通過字段名而不是數(shù)組下標(biāo)來訪問它返回的字段,比如$myrow["first"]。這樣我們就可以省不少力氣了。另外,程序中還加進(jìn)了do/while循環(huán)和if-else條件判定語句。
if-else條件判定語句的含意是,如果我們成功地把一條記錄賦給了$myrow變量,那就繼續(xù);否則,就跳到else部分,執(zhí)行那里的指令。
do/while循環(huán)是我們在上頁中用戶的while()循環(huán)的一個變體。我們要用到do/while的原因是:在最初的if語句中,我們已經(jīng)把查詢返回的第一條記錄賦給變量$myrow了。如果這時我們執(zhí)行一般的while循環(huán)(比如,while ($myrow = mysql_fetch_row($result)),那我們就會把第二條記錄賦給$myrow,而第一條記錄就被沖掉了。但是do/while循環(huán)可以讓我們執(zhí)行一次循環(huán)體內(nèi)容之后再來判定循環(huán)條件。因此,我們就不會不小心漏掉第一條記錄了。
最后,如果查詢結(jié)果沒有任何記錄的話,程序就會執(zhí)行包含在else{}部分的那些語句。如果您想看到這部分程序的執(zhí)行情況,可以把SQL語句改為SELECT * FROM employees WHERE id=6,或改成其他形式,使得查詢結(jié)果中沒有任何記錄。
下面我們來擴充一下循環(huán)if-else 代碼,使得頁面內(nèi)容更加豐富。相信您會喜歡的。>>
三、 第一個程序腳本
我們剛剛學(xué)到了循環(huán)語句,下面我們將在一個更加實際一點的例子中看看如何運用它。但是在這之前,您應(yīng)該知道如何處理Web表格、查詢參數(shù)串,以及表單的GET方法和POST方法。不久之前我們剛剛有文章介紹這部分內(nèi)容,您如果對這一部分還不太熟悉的話可以看看那篇文章。
現(xiàn)在,我們要處理查詢參數(shù)串,正如您所知道的,有三種方法可以把參數(shù)內(nèi)容寫入到查詢參數(shù)串中。第一種是在表格中使用GET方法;第二種是在瀏覽器的地址欄中輸入網(wǎng)址時直接加上查詢參數(shù);第三種是把查詢參數(shù)串嵌入到網(wǎng)頁的超鏈接中,使得超鏈接的內(nèi)容象下面這樣:。我們現(xiàn)在要用到最后這一種方法。
一開始,我們再來查詢我們的數(shù)據(jù)庫,列出員工姓名??纯聪旅娴某绦颍渲写蟛糠謨?nèi)容我們都已經(jīng)很熟悉了。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
do {
printf("%s %s
\n", $PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo "對不起,沒有找到記錄!";
}
?>
這里沒什么特別的,只是printf函數(shù)有些不同。那我們就來仔細(xì)研究一下。
首先要注意的是,所有的引號前面都有一個反斜杠。這個反斜杠告訴PHP直接顯示后面的字符,而不能把后面的字符當(dāng)作程序代碼來處理。另外要注意變量$PATH_INFO的用法。該變量在所用程序中都可以訪問,是用來保存程序自身的名稱與目錄位置的。我們之所以用到它是因為要在頁面中再調(diào)用這個程序本身。使用$PATH_INFO,我們可以做到,即使程序被挪到其他目錄,甚至是其他機器上時,我們也能保證正確地調(diào)用到這個程序。
正如我剛才提到的,程序所生成的網(wǎng)頁,其中包含的超鏈接會再次調(diào)用程序本身。不過,再次調(diào)用時,會加入一些查詢參數(shù)。
PHP見到查詢參數(shù)串中包含有“名字=值”這樣的成對格式時,會作一些特別的處理。它會自動生成一個變量,變量名稱與取值都與查詢參數(shù)串中所給定的名稱和取值相同。這一功能使得我們可以在程序中判斷出是第一次執(zhí)行本程序還是第二次。我們所要做的只是問問PHP$id這個變量是否存在。
當(dāng)我知道這個問題的答案后,我可以在第二次調(diào)用程序時顯示一些不同的結(jié)果出來。請看:
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
// display individual record
// 顯示單條記錄內(nèi)容
if ($id) {
$result = mysql_query("SELECT * FROM employees WHERE id=$id",$db);
$myrow = mysql_fetch_array($result);
printf("名: %s\n
", $myrow["first"]);
printf("姓: %s\n
", $myrow["last"]);
printf("住址: %s\n
", $myrow["address"]);
printf("職位: %s\n
", $myrow["position"]);
} else {
// show employee list
// 顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
// display list if there are records to display
// 如果有記錄,則顯示列表
do {
printf("%s %s
\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
// no records to display
// 沒有記錄可顯示 echo "對不起,沒有找到記錄!";
}
}
?>
程序開始變得復(fù)雜了,所以我在這里面加了注釋,來解釋一下到底發(fā)生了什么。您可以用//加入單行注釋,或者用/*和*/來括住大段的注釋。
到這里,我們已經(jīng)學(xué)會了第一個真正有用的PHP/MySQL腳本程序!現(xiàn)在,我們要看看怎樣把Web表格加進(jìn)來,并且向數(shù)據(jù)庫發(fā)送數(shù)據(jù)。>>
四、 向服務(wù)器發(fā)送數(shù)據(jù)
現(xiàn)在我們從數(shù)據(jù)庫讀取數(shù)據(jù)已經(jīng)沒有太多困難了。但是怎么反過來向數(shù)據(jù)庫發(fā)送數(shù)據(jù)呢?其實這不是PHP的問題。
首選,我們創(chuàng)建一個帶有簡單表格的網(wǎng)頁。
同樣要注意$PATH_INFO的用法。就象我在第一課里講到的,您可以在HTML代碼中的任意位置使用PHP。您也會注意到,表格中的每一個元素都對應(yīng)著數(shù)據(jù)庫中的一個字段。這種對應(yīng)關(guān)系并不是必須的,這么做只是更直觀一些,便于您以后理解這些代碼。
還要注意的是,我在Submit按鈕中加入了name屬性。這樣我在程序中可以試探$submit變量是否存在。于是,當(dāng)網(wǎng)頁被再次調(diào)用時,我就會知道調(diào)用頁面時是否已經(jīng)填寫了表格。
我應(yīng)該指出,您不一定要把上面的網(wǎng)頁內(nèi)容寫到PHP程序中,再返過來調(diào)用程序本身。您完全可以把顯示表格的網(wǎng)頁和處理表格的程序分開放在兩個網(wǎng)頁、三個網(wǎng)頁甚至更多網(wǎng)頁中,悉聽尊便。放在一個文件中只是可以使內(nèi)容更加緊湊而已。
那好,我們現(xiàn)在加入一些代碼,來檢查用戶在表格中輸入的內(nèi)容。我會把用$HTTP_POST_VARS把所有查詢參數(shù)變量都顯示出來,這只不過是為了證明PHP確實把所有變量都傳給了程序。這種方法是一個很有用的調(diào)試手段。如果您要想看全部的變量,可以用$GLOBALS。
if ($submit) {
// 處理表格輸入
while (list($name, $value) = each($HTTP_POST_VARS)) {
echo "$name = $value
\n";
}
} else{
// 顯示表格
?>
} // end if,if結(jié)束
?>
程序現(xiàn)在運行正常,那我們現(xiàn)在就可以取到表格輸入的內(nèi)容,并把它們發(fā)送給數(shù)據(jù)庫。
if ($submit) {
// 處理表格輸入
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
$result = mysql_query($sql);
echo "Thank you! Information entered.\n";
} else{
// 顯示表格內(nèi)容
?>
} // end if,if結(jié)束
?>
您現(xiàn)在已經(jīng)向數(shù)據(jù)庫中插入數(shù)據(jù)了。不過還有很多完善的工作要做。如果用戶沒有填寫某一欄怎么辦?在需要填入數(shù)字的地方填了文字怎么辦?或者填錯了怎么辦?
別擔(dān)心。我們一步一步來。>>
五、修改數(shù)據(jù)
在個教程中,我都把要執(zhí)行的SQL語句放到一個變量($sql)中,然后才用mysql_query()來執(zhí)行數(shù)據(jù)庫查詢。在調(diào)試時這是很有用的。如果程序出了什么問題,您隨時可以把SQL語句的內(nèi)容顯示出來,檢查其中的語法錯誤。
我們已經(jīng)學(xué)習(xí)了如何把數(shù)據(jù)插入到數(shù)據(jù)庫中?,F(xiàn)在我們來學(xué)習(xí)如何修改數(shù)據(jù)庫中已有的記錄。數(shù)據(jù)的編輯包括兩部分:數(shù)據(jù)顯示和通過表格輸入把數(shù)據(jù)返回給數(shù)據(jù)庫,這兩部分我們前面都已經(jīng)講到了。然而,數(shù)據(jù)編輯還是有一點點不同,我們必須先在表格中顯示出相關(guān)的數(shù)據(jù)。
首先,我們回過頭再看看第一課的程序代碼,在網(wǎng)頁中顯示員工姓名。但是這次,我們要把數(shù)據(jù)顯示在表格中。程序看起來象下面這樣:
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
// 查詢數(shù)據(jù)庫
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
} else {
// 顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("%s %s
\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
我們剛才是把字段內(nèi)容寫入到相應(yīng)表格元素中的value屬性里,這是相應(yīng)簡單的。我們再往前進(jìn)一步,使程序可以把用戶修改過的內(nèi)容寫回數(shù)據(jù)庫去。同樣,我們通過Submit按鈕來判斷是否處理表格輸入內(nèi)容。還要注意,我們用的SQL語句稍稍有些不同。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
if ($submit) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
$result = mysql_query($sql);
echo "謝謝!數(shù)據(jù)更改完成\n";
} else {
// 查詢數(shù)據(jù)庫
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
}
} else {
// 顯示員工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("%s %s
\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
就是這樣。在這個程序中已經(jīng)包含了我們學(xué)過所大多數(shù)特性。您也已經(jīng)看到,我們在一個if()條件判別語句中又加了一個if()語句,來檢查多重條件。
下面,我們要把所有東西全都加在一起,寫出一個很好的程序來。>>
六、完整的程序
在本課結(jié)束前,我們要把所有東西加入到一個程序中,使它具有增加、編輯修改、刪除記錄的功能。這是前面所有內(nèi)容的一個延伸,也可以作為極好的復(fù)習(xí)方法。看看下面的程序。
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($submit) {
// 如果沒有ID,則我們是在增加記錄,否則我們是在修改記錄
if ($id) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
}
// 向數(shù)據(jù)庫發(fā)出SQL命令
$result = mysql_query($sql);
echo "記錄修改成功!
";
} elseif ($delete) {
// 刪除一條記錄
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "記錄刪除成功!
";
} else {
// 如果我們還沒有按submit按鈕,那么執(zhí)行下面這部分程序
if (!$id) {
// 如果不是修改狀態(tài),則顯示員工列表 $result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("%s %s \n",
$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
printf("(DELETE)br>", $PATH_INFO, $myrow["id"]);
}
}
?>
}
?>
這段程序看起來很復(fù)雜,但實際上并不難。程序主要有三個部分。第一個if()語句檢查我們是否已經(jīng)按下了那個“輸入信息”的數(shù)據(jù)提交按鈕。如果是,程序再檢查$id是否存在。如果不存在,那我們就是在增加記錄狀態(tài),否則,我們是在修改記錄狀態(tài)。
接下來我們檢查變量$delete是否存在。如果存在,我們是要刪除記錄。注意,第一個if()語句檢查的是用POST方法發(fā)送來的變量,而這一次我們檢查的是GET方法中傳遞過來的變量。
最后,程序默認(rèn)的動作是顯示員工列表和表格。同樣,我們要檢查變量$id是否存在。如果存在,我們就根據(jù)它的值檢索出相應(yīng)的記錄顯示出來。否則,我們會顯示一個空的表格。
現(xiàn)在,我們已經(jīng)把所學(xué)的東西全部都放在一個程序里頭了。我們用到了while()循環(huán),用到了if()語句,并且執(zhí)行了全部的SQL基本操作 - SELECT、INSERT、UPDATE以及DELETE。另外,我們也知道如何在不同的網(wǎng)頁之間通過URL和表格輸入來互相傳遞信息。
在第三課里,我們要學(xué)習(xí)如何為網(wǎng)頁增加智能化處理能力。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

1. Le premier choix pour la combinaison Laravel Mysql Vue / React dans la communauté de questions et réponses de développement PHP est le premier choix pour la combinaison Laravel Mysql Vue / React, en raison de sa maturité dans l'écosystème et de l'efficacité de développement élevée; 2. Les performances élevées nécessitent une dépendance à la cache (redis), une optimisation de la base de données, des files d'attente CDN et asynchrones; 3. La sécurité doit être effectuée avec le filtrage d'entrée, la protection CSRF, les HTTP, le cryptage de mot de passe et le contr?le d'autorisation; 4. Publicité facultative, abonnement aux membres, récompenses, commissions, paiement des connaissances et autres modèles, le noyau est de faire correspondre le ton communautaire et les besoins des utilisateurs.

Il existe trois fa?ons principales de définir des variables d'environnement dans PHP: 1. Configuration globale via Php.ini; 2. Passé via un serveur Web (tel que setenv d'Apache ou Fastcgi_param de Nginx); 3. Utilisez la fonction PUTENV () dans les scripts PHP. Parmi eux, PHP.ini convient aux configurations globales et modifiées, la configuration du serveur Web convient aux scénarios qui doivent être isolés et PUTENV () convient aux variables temporaires. Les stratégies de persistance incluent des fichiers de configuration (tels que PHP.ini ou la configuration du serveur Web), les fichiers .env sont chargés de bibliothèque Dotenv et l'injection dynamique de variables dans les processus CI / CD. Les informations sensibles à la gestion de la sécurité doivent être évitées à code dur et il est recommandé de l'utiliser.

Pour réaliser l'automatisation du déploiement MySQL, la clé est d'utiliser Terraform pour définir les ressources, la configuration de gestion anible, le GIT pour le contr?le de version et le renforcement de la gestion de la sécurité et de l'autorisation. 1. Utilisez Terraform pour définir les instances MySQL, telles que la version, le type, le contr?le d'accès et d'autres attributs de ressources d'AWSRD; 2. Utilisez ANSIBLEPLAYBOOK pour réaliser des configurations détaillées telles que la création d'utilisateurs de base de données, les paramètres d'autorisation, etc.; 3. Tous les fichiers de configuration sont inclus dans la gestion GIT, le suivi du changement de support et le développement collaboratif; 4. évitez les informations sensibles à code dur, utilisez Vault ou ANSIBLEVAULT pour gérer les mots de passe et définissez les principes de contr?le d'accès et d'autorisation minimale.

Pour collecter les données de comportement des utilisateurs, vous devez enregistrer la navigation, la recherche, l'achat et d'autres informations dans la base de données via PHP et les nettoyer et les analyser pour explorer les préférences d'intérêt; 2. La sélection des algorithmes de recommandation doit être déterminée sur la base des caractéristiques des données: en fonction du contenu, du filtrage collaboratif, des règles ou des recommandations mitigées; 3. Le filtrage collaboratif peut être mis en ?uvre en PHP pour calculer la similitude du cosinus des utilisateurs, sélectionner K voisins les plus proches, les scores de prédiction pondérés et recommander des produits à haut score; 4. L'évaluation des performances utilise la précision, le rappel, la valeur F1 et le CTR, le taux de conversion et vérifier l'effet par le biais de tests A / B; 5. Les problèmes de démarrage à froid peuvent être atténués par des attributs de produits, des informations d'enregistrement des utilisateurs, des recommandations populaires et des évaluations d'experts; 6. Les méthodes d'optimisation des performances comprennent les résultats de recommandation en cache, le traitement asynchrone, l'informatique distribuée et l'optimisation des requêtes SQL, améliorant ainsi l'efficacité des recommandations et l'expérience utilisateur.

Lorsque vous choisissez un cadre PHP approprié, vous devez considérer de manière approfondie en fonction des besoins du projet: Laravel convient au développement rapide et fournit des moteurs de modèle éloquente et de lame, qui sont pratiques pour le fonctionnement de la base de données et le rendu de formulaire dynamique; Symfony est plus flexible et adapté aux systèmes complexes; Codeigniter est léger et adapté à des applications simples avec des exigences de performance élevées. 2. Pour assurer la précision des modèles d'IA, nous devons commencer avec une formation de données de haute qualité, une sélection raisonnable des indicateurs d'évaluation (tels que la précision, le rappel, la valeur F1), l'évaluation régulière des performances et le réglage du modèle, et assurer la qualité du code grace aux tests unitaires et aux tests d'intégration, tout en surveillant continuellement les données d'entrée pour empêcher la dérive des données. 3. De nombreuses mesures sont nécessaires pour protéger la confidentialité des utilisateurs: crypter et stocker des données sensibles (comme AES

Pourquoi ai-je besoin de la connexion MySQL de cryptage SSL / TLS? étant donné que les connexions non cryptées peuvent provoquer l'interception des données sensibles, l'activation de SSL / TLS peut empêcher les attaques de l'homme au milieu et répondre aux exigences de conformité; 2. Comment configurer SSL / TLS pour MySQL? Vous devez générer un certificat et une clé privée, modifier le fichier de configuration pour spécifier les chemins SSL-CA, SSL-CERT et SSL-Key et redémarrer le service; 3. Comment forcer SSL lorsque le client se connecte? Implémenté en spécifiant les exigences ou requirex509 lors de la création d'un utilisateur; 4. Les détails qui sont facilement négligés dans la configuration SSL incluent les autorisations de chemin de certificat, les problèmes d'expiration des certificats et les exigences de configuration du client.

PHP joue le r?le du connecteur et du Brain Center dans le service client intelligent, responsable de la connexion des entrées frontales, du stockage de la base de données et des services d'IA externes; 2. Lors de la mise en ?uvre, il est nécessaire de créer une architecture multicouche: le front-end re?oit des messages utilisateur, les demandes de prétraitements et de routes de PHP, correspondent d'abord à la base de connaissances locale et manque, appelez des services AI externes tels que Openai ou DialogFlow pour obtenir une réponse intelligente; 3. La gestion de session est écrite à MySQL et à d'autres bases de données par PHP pour assurer la continuité du contexte; 4. Les services d'IA intégrés doivent utiliser Guzzle pour envoyer des demandes HTTP, stocker en toute sécurité les apikeys et faire un bon travail de gestion des erreurs et d'analyse de réponse; 5. La conception de la base de données doit inclure des sessions, des messages, des bases de connaissances et des tables d'utilisateurs, de créer raisonnablement des index, d'assurer la sécurité et les performances et de prendre en charge la mémoire du robot

Pour permettre aux conteneurs PHP de prendre en charge la construction automatique, le noyau réside dans la configuration du processus d'intégration continue (CI). 1. Utilisez Dockerfile pour définir l'environnement PHP, y compris l'image de base, l'installation d'extension, la gestion de la dépendance et les paramètres d'autorisation; 2. Configurez des outils CI / CD tels que GitLabci et définissez les étapes de construction, de test et de déploiement via le fichier .gitlab-ci.yml pour réaliser une construction, un test et un déploiement automatique; 3. Intégrer des cadres de test tels que PHPUnit pour s'assurer que les tests sont automatiquement exécutés après les modifications du code; 4. Utiliser des stratégies de déploiement automatisées telles que Kubernetes pour définir la configuration de déploiement via le fichier de déploiement.yaml; 5. Optimiser Dockerfile et adopter une construction en plusieurs étapes
