---
###### tags: `web111a` `程式筆記` `PHP`
---
# PHP & MySQL
* 時間:2022/5/26
* 老師:戴德仁
## 環境設定
本課程 PHP 與 Laravel 授課老師分開,先將環境建立
[前置作業:SSH 連線](/8oOwRJIFTYC34mwPEGsdpQ#本機端用-SSH-登入虛擬機)
* ssh
* port:443
* 提供安全性傳輸 `https://` 傳輸資訊不會以明碼馬顯示於網址中
VS Code 中 Remote FS 套件,[建立多組設置](/8oOwRJIFTYC34mwPEGsdpQ#上傳到伺服器)
```json=
/* settings.json */
"remotefs.remote":{
"allen":{
"scheme":"sftp"
"host":"localhost"
"username":"allen"
"privatekeypath":"c:/Users/allen/.ssh/id rsa allen"
"rootPath":"D:\\htdocs\ \www\ \webllla"
},
"vm":{
"scheme":"sftp"
"host":"192.168.67.178"
"username":"webllla"
"privateKeyPath":"c:/Users/allen/.ssh/id_rsa_vm"
"rootPath":"D: \\htdocs\www\\webllla\\"
},
"xampp-server":{
"scheme":"sftp"
"host":"127.0.0.1"
"username":"allen"
"privateKeyPath":"c:/Users/allen/.ssh/id_rsa_xampp-server"
"rootpath":"D:\\htdocs\\www\\webllla\\"
}
}
```
```json=
/* sftp.json */
{
"name": "xampp同服器",
"remote" : "xampp-server",
"remotepath" : "d:/xampp/htdocs/web111a",
"protocol": "sftp",
"uploadOnSave" : true
"ignore": [
".vscode",
".git",
".DS Store"
]
}
```
更改 [Virual-host](/8oOwRJIFTYC34mwPEGsdpQ#XAMPP-Virual-host),ip到時候再換就好
```htmlembedded=
<!-- httpd-vhost.conf -->
<VirtualHost *:6680>
ServerAdmitwebmaster@dummy-host2.example
DocumentRoot "D: /xampp/htdocs/web11la/laravel"
ServerName laravel.web111a.com
##ErrorLog "logs/dunmy-host2.example.com-error.log"
##CustomLog"1ogs/dummy-host2.example.com-access.logm common
</VirtualHost>
<VirtualHost *:6680>
ServerAdmitwebmaster@dummy-host2.example
DocumentRoot "D: /xampp/htdocs/web11la/laravel"
ServerName laravel.web111a.com
##ErrorLog "logs/dunmy-host2.example.com-error.log"
##CustomLog"1ogs/dummy-host2.example.com-access.logm common
</VirtualHost>
```
更改 `C:/Window/System32/drivers/etc/hosts`
```htmlembedded=
<!-- hosts -->
127.0.0.1 php.web111a.com
127.0.0.1 laravel.web111a.com
```
## 連線資料庫
1. mySQL()
1. PDO 物件:laravel 使用這種方式
## PHP (Hypertext Preprocessor)
* `<?php 內容 ?>`
* 支援短標籤 `<? 內容 ?>`
* xampp :arrow_right: php :arrow_right: php.ini :arrow_right: 搜尋 `short_open_tag` 改為 `On`
* 要加分號 `;`
* 大小寫敏感
* call by value: `$val`
* call by ref: `&$val`
* 變數+字串:`"{$var} 一二三"`,注意只能是雙引號 `"`,單引號 `'` 不支援此種寫法
* $arr = array(1, 2, 3);
* 變數:
* `$val`
* 通常小寫
* 常數:不可改變
* define("key", "value")
* 通常大寫
### 變數
宣告方式
```php=
$var = "yo~":
```
變數+字串用 `.`
```php=
echo "My name is ".$name;
```
變數+字串縮寫,注意只能是雙引號 `"`,單引號 `'` 不支援此種寫法
:::success
:accept:
```php=
echo "{$var} 一二三";
```
:::
:::danger
:no_entry_sign:
```php=
echo '{$var} 一二三';
```
:::
### Array
```php=
$arr = array(1, 2, 3);
```
### 常數
宣告完就不可改變,例外:魔術常數。一般而言會以全大寫命名
```php=
define("PHPCONST", "yo~")
```
魔術常數:
```php=
$line = __LINE__;
```

```php=
namespace Myproject;
$a = __LINE__;
$b = __FILE__;
$c = __DIR__;
$g = __NAMESPACE__;
echo "取得行程式的行號{$a}<br>";
echo "取得文件在本機的路徑與名{$b}<br>";
echo "取得文件在本機的路徑{$c}<br>";
class test
{
public function fun(){
$d = __FUNCTION__;
echo"取得函數的名稱{$d}<br>";
}
public function meth(){
$e = __CLASS__;
$f = __METHOD__;
echo"取得類別名稱{$e}<br>";
echo"取得類别的方法名稱{$f}<br>";
}
}
$obj = new test();
$obj->fun();
$obj->meth();
echo "取得區分大小寫命名空間名稱{$g}";
```
* $obj->a調用物件方法
* $obj=>a指定陣列key=>value
* $obj::取得靜態常數
### 資料類型
* var_dump() 變數
* print_r() 陣列
* gettype()
Boolean
### print & echo
print 會返回值
echo 輸出完就結束
## MySQL
關聯式資料庫
### 環境建置
新增 `phpmyadmin.web111a.com:6080`
* xampp/apache/conf/extra/httpd-vhost.conf
* 路徑:xampp/phpMyAdmin
* Windows/System32/drivers/etc/hosts
如有必要新增環境變數
```shell=
xampp/mysql/bin/mysql.exe
```
目前是沒有密碼的

新增使用者帳號,為了 DEMO 使用請新增可用外部連線 root:`root@%`,記得執行,可以注意到上方有執行的 sql

新增完會被登出

更改 phpmyadmin config,路徑:xampp/phpMyAdmin/config.inc.php

改以下兩行
```php=
$cfg['Servers'][$i]['auth_type'] = 'http';
...
$cfg['Servers'][$i]['passwrod'] = '<passwrod>';
```
### 登入
```shell=
mysql -u<user> -p<password> -P<port>
```