PHP的基础语法

注意:打开XAMPP时,请在浏览器中输入http://localhost/~

◆数据库的三种类型(教科书P288~9)

型            内 容関係型(リレーショナル型)データを表で管理。表計算と同様の形!ツリー型(階層型)データを階層で管理ネットワーク型データを網状に管理。必要なデータ間のみ連携されている。
在这3个选项中,通常只使用关系型数据库。
而后面的两个选项在理论上是有的,但几乎没有实际应用例子。

◆关系型数据库(教科书第290~1页)

数据库将逐行进行处理。
每行必须包含一个主键。使用该键来选择数据。

主键的条件是“唯一且非空”。

tbl中的列是列名。tbl的集合是服务器的组成部分。

■视图表

表操作      内 容選択必要な行単位で取り出す射影必要な列(カラム)単位で取り出す結合複数のテーブルをキーで合体

外键

用于连接tbl(指表)之间的关键字(如共同的id等)。

■ 标准化

将表进行分割,以防止不一致和遗漏。
(非正规形式→第一正规形式→第二→第三)

    • 第一正規形

繰り返しを除く(繰り返し部分を切り離し、新たなレコードとして挿入する)

第二正規形

関係する部分ごとにtblを分ける

将以下内容以中文母语进行改述,只需要提供一种选择:
|商品编号|商品名称|单价|数量|

|编号|数量|   |编号|名称|单价|
分成两部分。

    • 第三正規形

主キー以外に依存している列を取り出し、tblを分ける

◆使用SQL操作数据库(教科书P310~1)

■DB和PHP之间的数据交互指令(代表性的)

内容命令選択(取出)SELECT書込INSERT INTO更新UPDATE削除DELETEtblやDB作成CREATE

※CREATE不经常使用。

选择的条件

12射影WHERE結合JOIN

从~中选择全部数据

    • ロールバック:障害が起きる前段階に戻す

 

    ロールフォワード:以降を手動で処理

◆PHP

PHP在服务器端是一种编程语言,当服务器收到PHP文件的请求时,在服务器端机器上进行PHP部分的处理,并将结果传递给请求者。

    • ファイル拡張子 :「.php」

 

    • プログラムエリア:「 此外,PHP具有访问各种数据库的能力,目前使用PHP最常访问的数据库是MySQL。
XAMPP(Windows使用)
MAMP(Mac使用)
Apache(服务器)
可以使用的租用服务器DB
免费服务器xfree
请注意phpMyAdmin配置已过时
Lollipop
Sakura(付费但价格便宜的服务器)
与XAMPP相同的配置
源码在GitHub上开放

◆XAMPP的初始設定

■更改配置文件

保留设置文件(.ini)的备份。

      • C:\xampp\php の「php.ini」をデスクトップにコピペ

 

      • 「php.ini.bak」に名前変更し、フォルダに戻す

修改php.ini文件

      • 「mbstring.language = Japanese」の頭にある「;」(コメントアウト)を消す

 

      • date.timezone=~を「date.timezone=”Asia/Tokyo”」に修正

重新启动XAMPP,并点击Apache&MySQL的[start]按钮。

      • Moduleが薄緑になり、下に赤文字エラー出ないことを確認したらOK!
当关闭时,如果不按“停止”按钮,它会在后台持续运行。

以默认设置打开文件结构。

删除位于htdocs目录下的”index.php”文件。

2)打开 http://localhost/ (直接加入书签)

◆htdocs(C:\xampp\htdocs)→ htdocs(C:\xampp\htdocs)

在本地使用XAMPP进行工作。

将文件保存在「xampp文件夹」的「htdocs」中。除此之外的地方放置,PHP将无法处理。
(相当于在托管服务器上,租用并放置文件或文件夹的位置!)

■访问时,请输入”http://localhost/ “!!

在XAMPP中处理PHP文件并在浏览器中显示,需要在URL中输入”http://localhost/~”,然后输入文件夹名称和文件名进行访问。

注意:只有htdocs文件夹是“http://localhost”地址。

◆关于XAMPP的按钮

ボタン             動作[Shell]ボタンwin shellひらく[Admin]ボタンApache=フォルダ構成、MySQL=phpMyAdminが開く[Explorer]ボタンXAMPPのフォルダ開く[Service]ボタン今動いてるプログラム?が見れる(変なの邪魔してないかとか見る
绝对不要触碰以下phpMyAdmin的数据表,因为它们构成了XAMPP:
– information_schema
– mysql
– performance_schema
– phpmyadmin
在shell上键入查询语句,但是在phpMyAdmin的“SQL”选项卡中更方便…(快捷方式已过时)
文字编码是UTF8_BIN的是日语。

◆ 回应文(输出)

echo "ここに表示する内容";

在那個位置輸出指定的內容(文字等)。

<p><?php echo "Hello,I'm a PHP!"; ?></p>
//   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↑ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
//ここがPHPとして処理され、指定した文字列が書き出される
//(「<p>Hello~PHP!</p>」となり、ブラウザで出力)
      • echoの””中にpタグ含めて書くより、pタグでechoを包む形が多い!!

PHPで処理する量を減らすため、タグが確定してる時は中にPHP

PHPエリア内はスペース効かないので、ソース汚くなる……

■在echo中的逗号 “,”。

将字符串连接起来。可以将字符串和变量连接在一起。

echo "<p>「",$number,"」は、奇数です。</p>",PHP_EOL;
       ̄    ̄           
使用print没有特别的好处,所以用echo就可以。

◆源代码的换行

■ 「PHP_EOL」… 输出源代码的换行

echo "<p>「",$number,"」は、奇数です。</p>",PHP_EOL;
//                                ̄ ̄ ̄ ̄

◆注释

■/*~*/
■/*~*/

多行(块注释)

■//(需要用中文进行同义改写)

一排

请用中文进行转述,只需给出一种选项:

一行 (yī
一排 (yī
一列 (yī liè)

PHP 的注释是在打开源代码时也无法看到的(因为它是在 PHP 处理内部的)。

◆「”」和「’」的区别

JS(JavaScript)中的「”」「’」具有相同的意义,但在PHP中却不同!!!!

在echo文件中

      • 「”~”」

内部の変数を評価し、値に変換して出力

「’~’」

内部の変数は評価せず、変数名そのまま出力

◆$ ~(变量的命名)

■ 「$~」

给变量取名字

与JS不同,变量的“声明”是不需要的!

●mt_rand(生成随机数)

■ 「mt_rand(min, max)」-「mt_rand(最小值,最大值)」

随机获取

mt_rand()和rand()具有相同的功能,是rand()的别名。
两者都可以在括号内获取一个在”min~max”范围内的随机数。

如果省略了括号(),则会获得以下输入的随机数。

      • min:「0」

 

      • max:そのシステムで扱える最大の整数
rand()函数旧了。如果PHP版本旧的话,用”mt_”更快。

◆var_dump()函数

在括号内写上变量时,会输出该变量的类型和内容。
类似于JavaScript的console.log效果。

由于这是在浏览器上呈现的,所以在开发结束时不能有任何留下的东西!!
$a = 1;
var_dump($a); //int(1) と出力

◆错误

      • パースエラー/シンタックスエラー

致命的!画面に何も出ない

FatalErrorなど

そこまで処理し、エラーで停止

警告

エラー出るだけで処理する

※最后全部删除包括警告!

◆可变变量

在变量名中使用变量,并将变量名设为可变。

$var=1;
$var_name='var';
echo $$var_name;
//    ̄ ̄↑ ̄ ̄
//  まず、「$var_name」が評価されて「$var_name」の中身が「$var」
//  となり、その後に「$var」が評価され「1」がechoされる

◆超级全局变量

「$_ほにゃほにゃ」と呼ばれるものは、スーパーグローバル変数として知られています。

変数        内容$_GETformのmethod=”get”で受け取った変数$_POSTformのmethod=”post”で受け取った変数$_COOKIEcookieから受け取った変数$_SESSIONセッション変数
使用cookie和会话是一起的

◆变量的范围

■全球范围

PHP没有块级作用域!

与 JS 不同,即使在块级作用域中定义也可以之后一直使用,所以要注意。

■ 本地范围

在函数内部是本地的!!

◆固定值

■ define()函数

引数内容第1引数定数名(名なので文字列)第2引数値
<?php
define('book','Perfect PHP');

■const 关键字

可以用类似JavaScript的方式进行设置。(适用于PHP5.3及以上版本)

<?php
const BOOK = 'Perfect PHP';

◆printfによる小数点以下の強制出力

printf()

引数内容第1引数第何位までかを指定(’%.〇f’の形で、〇部に指定)第2引数値

echoの場合
小数点以下&以降0しかない時、省略(整数に)される。

◆型判定

型判定内容is_string()文字列is_int()整数is_float()浮動小数点is_numeric()数値として扱えるか判定

()の値を判定し、「true」or「false」が返る。

在中文中,文本字符串中的“1”会自动转换为整数类型= true判断。

◆类型检查

获取类型()函数

返回()内的对象的类型。

◆字符串的连接运算符

用「。」进行。

在echo语句中,即使使用逗号“,”也可以将字符串连接起来。

◆変数の計算の順番(メモ)

$a=1;
$b=$a ++;
//  ̄ ̄ ̄~aまで先に処理

【结果】
$a…2
$b…1

【结果】
$a为2,
$b为1。

$a=;
$b=++$a;
//   ̄ ̄++~が先に処理

【结果】
$a…2
$b…2

◆数组

$配列名=array(中身1,,);

添字数组和关联数组都是用相同的命令创建的。(由于使用相同的函数创建,可以看作添字数组和关联数组是同一个东西!)

在PHP中,如果没有指定键,将自动将索引作为键来创建数组。
以下两个代码段创建了相同的数组!

$arr=array(
  'a',
  'b',
  'c',
);
$arr=array(
  0=>'a',
  1=>'b',
  2=>'c',
);

数组是一种数据结构,可以按特定顺序存储多个元素的集合。

      • 値の変更 :可能

 

      • キーの変更:不可!
<?php
$one = array(
  1,
  1.0,
  '1',  //複数の型も入れられる
);

$fruits = array(
  'peach',
  'apple' => 'red', //連想配列(appleがキー
);

echo $fruits[1],PHP_EOL;      //「peach」と表示
echo $fruits['apple'],PHP_EOL;//「red」と表示

$arr=array();  //空の配列

◆在数组中插入或删除元素

array_splice(配列,番目から,個削除し,そこに挿入する)
引数内容第1引数配列第2引数〇番目から第3引数△個削除し第4引数そこに挿入する
插入数据的键是不可指定的(索引会自动附加)。

◆如果

可以以与JavaScript相似的方式使用。

与JS的区别之一是

elseif命令

else ifも問題なく使用でき、かつelseifという形も使用できる。

if(){
// ︙
}
else if(){
// ︙
if(){
// ︙
}
elseif(){
// ︙
JS的else{if(~是一种简略形式。
实际上有一个名为”elseif”的指令。

■与JS的不同之处②

      • ブロックの代わりに「:」「endif」を使用できる
if():
// ここに処理
else:
// ここに処理
endif;

◆在PHP中的switch

PHP的switch语句会进行case和”==”判定。
(教科书上使用的是”===”,但正确的是”==”)

由于判断方式根据不同的语言而异,因此在学习新语言时,必须确保确认switch语句的使用方式!

◆遍历

和使用for循环遍历数组的效果一样!

foreach(配列名 as ここで使う変数)
//       ↑      ̄ ̄ ̄ ̄ ̄ ̄ ̄$value等が定番
//添字なくても処理してくれる

按顺序将数组的值从头开始赋给指定的变量,进行循环处理。
如果返回的值为false,表示(在数组的最后一个数据之后)没有更多的数据,那么就结束循环处理。

除了取得值之外,还可以获取键。

foreach(配列名 as キーを受ける変数 => 値を受ける変数)
//              ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄$key等が定番

◆通过foreach循环引用

10.gif

因此,如果在foreach循环结束后向$color赋值,那么它会写入数组的最后一个数据。

为了避免这种情况发生,当进行引用时,需要立即解除变量的引用!!

unset(変数名)

重置指定的变量的函数。

◆约会 (yuē huì)

date(フォーマット);

■格式列表

フォーマット意味Y年4桁y年2桁m月(二桁の数字)nd日(二桁の数字)jD曜日3文字l曜日フルスペルw曜日(数字)G時間24時g時間12時H時間24時2桁h時間12時2桁i分2桁s秒2桁
echo date("Ymd");// 20010310
$today = date("H:i:s");// 17:16:18
$today = date("Y-m-d H:i:s");
// 2001-03-10 17:16:18 (MySQL の DATETIME フォーマット)

◆退出()、终止()

一起执行PHP的强制终止命令。

この関数実行後は、そのPHPファイルのそれ以降の処理はしない。
()内に文章を設定すると、終了時にそれを出力する。

<?php
die ('ここで終了~!'); //画面上に文字表示
echo 'ここは処理されないよ';
?>

◆array_map()函数

array_map(関数,配列)
引数内容第1引数関数第2引数配列

对于第2个参数指定的数组中的每个元素,执行第1个参数的函数
 ̄ ̄ ̄ ̄ ̄↑ ̄ ̄ ̄ ̄
(将数组元素的值逐个作为参数传递给第1个参数的函数,并将返回值赋给该元素)

闭包(教科书P114)

包括本地作用域和定义位置作用域的函数。

function() use($関数内で利用したい外の変数名){ ここに処理 }
//                      ↓2が親
$my_pow = function($times = 2){
//                  ↓親の引数を使う宣言
    return function ($v) use(&$times){
//   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄returnで指定した関数の戻り値をreturnする
        return pow($v,$times);
    }
}
//引数を渡されなければ「2」(親を使う)、渡されたらその値を使う

$cube = $my_pow(3);//returnで関数が入る

echo $cube(2);//2の3べき乗(2*2*2)、結果は8
echo $cube(4);//4の3べき乗(4*4*4)、結果は64

関数に「;」は不要だが、
無名関数は変数に関数を代入しているので最後に「;」($suu=関数;)

◆指数运算

pow(元の数,べき乗の数);

◆htmlspecialchars()函数

htmlspecialchars(,ENT_QUOTES,文字コード)
引数内容第1引数値第2引数ENT_QUOTESで「’」「”」両方対象第3引数文字コード
      • 第1引数の値の中で、htmlではそのままでは出力されない文字をエスケープ処理する

「>」→「&gr;」、「<」→「<」など

如果用户输入的内容在HTML中包含有意义的符号等,则需要进行处理(例如<>标签等)&/>等。
      • 第2引数

ENT_COMPAT ダブルクオートは変換しますがシングルクオートは変換しません。

ENT_QUOTES シングルクオートとダブルクオートを共に変換します。

ENT_NOQUOTES

ユーザーの入力したものはエスケープ処理必須!!1!

◆formデータ受取(教科書174P)

在HTML一侧,按以下形式接收数据。

get →「$_GET[‘name属性値’]」

post→「$_POST[‘name属性値’]」

<body>
 <?php if(isset($_GET['name']) && strlen($_GET['name']) > 0): ?>
 <p><?php echo htmlspecialchars($_GET['name'],ENT_QUOTES,'UTF-8'); ?>さん、こん
にちは</p>
 <?php endif; ?>
 <form action="form.php" method="get">
  <p>名前:<input type="text" name="name">
  <input type="submit" value="送信">
 </form>
</body>

◆计数()

count(配列)

配列の要素数を取得

◆表单确认页面→接收

1)
htmlを書くとき、inputのtypeを「hidden」にすると、ブラウザ上に表示されない。
(ソースには表示される)

<input type="hidden" name="~" value="<?php echo ;?">

の形で、ユーザの入力したものをvalueに設定していく。

■返回确认画面的按钮

<input type="button" value="戻る" onclick="history.go(-1)">
//                                  ̄ ̄ ̄ ̄↑ ̄ ̄ ̄
//                     JavaScriptで一つ前のページへ戻る
//                     (「-1」は1ページ分戻る)

◆正規表現によるチェック(教科書510P)

preg_match(正規表現,チェックする文字列)
引数内容第1引数正規表現第2引数チェックする文字列
结果将以 true/false 的形式返回!!!

※ 唯一需要提供的是,从头到尾(除非是特殊情况,如电子邮件地址等)
※ “~/u”是指定UTF-8的使用

if (preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$message)) {
$message = $message;
}else{
$error = '変な記号は使わないでね。';
}

■ 郵遞區號 格式檢查

if (preg_match('/^([0-9]{3})(-[0-9]{4})?$/i', $data)) {

■电话号码 格式检查

if (preg_match('/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/', $data)) {

■检查数值格式

if (preg_match('/^[0-9]+$/', $data)) {

■英文字校对检查

if (preg_match('/^[a-zA-Z]+$/', $data)) { // 英字の場合

■英数字格式检查

if (preg_match('/^[a-zA-Z0-9]+$/', $data)) { // 英数字の場合 }

■电子邮件地址格式检查

if (preg_match("/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@[A-Za-z0-9_.-]+\.[A-Za-z0-9]+$/", $mail)) { // メールアドレスやで

■汉字·平假名·片假名的格式检查

mb_regex_encoding("UTF-8");
if (preg_match("/^[ぁ-んァ-ヶー一-龠]+$/u",$name)) {

◆表单的文件提交和保存

$_FILES['name属性値']['コード']

■ 代码(以下五种)

コード内容nameユーザが決めたファイル名tmp_nameファイルの一時保管場所sizeファイルサイズ(byte)typeファイルのmimeタイプ(拡張子など)errorエラーコード(0~8)

<エラーコード>
0:成功
1:php.ini(サーバ側の設定)で制限したサイズをオーバー
2:HTMLで制限したサイズをオーバー
3:ファイルが一部しか転送されていない
4:ファイルが全部転送されていない
5:欠番
6:テンポラリーフォルダ(一時保管場所)がない
7:書き込み失敗
8:PHPの拡張モジュールによる制限

■htmlによるファイルサイズ制限

<form ~~>
 ︙
<input type="hidden" name="MAX_FILE_SIZE" value="byte数">
<input type="file" name="~"> ↑←※順番固定!!!!

◆从临时存放处移动到保存文件夹

一旦存储的文件,在从特定的PHP文件转移到其他文件执行后将被删除。因此,只有在通过

中的“action”指定的文件中才能进行保存处理。

@move_uploaded_file(一時保管場所,保存する相対パス)
//                           ̄ ̄ ̄ ̄↑ ̄ ̄ ̄
//                         PHPから見た相対パス
引数内容第1引数一時保管場所第2引数保存する相対パス
结果以true/false返回。
move_uploaded_file($_FILES['upload_csv']['tmp_name'], $storeDir.$filename);

move_uploaded_file( $_FILES['file1']['tmp_name'], './upload/pic.jpg');
只在执行命令时临时保存

◆确认所指定的文件是否存在

file_exists(相対パス)
引数内容第1引数相対パス
    • 結果がtrue :存在する
    結果がfalse:存在しない

◆ 潮流

    1. 错误代码检查
    1. 检查文件类型、大小等(可选,但几乎必需)
    1. 创建保存的相对路径
    1. 检查是否存在同名文件保存
    移动文件

◆会议

会话的意思

在不使用表单的情况下,即使页面迁移,也能携带数据。
(用于在网站内移动时保持登录状态,无需重复登录)

session_start();
在每个页面上需要声明(如果没有则创建新的,如果有则与现有的相关联)。
    • 実行すると、サーバからユーザにcookieとしてセッションIDが送られる。
    • サーバ内にはセッションIDごとに$_SESSIONを使用した連想配列が保持。
    プログラム上で$_SESSIONにデータを保存しておき、他ページでこの値のチェック(存在チェック等)を行うことで、セッションの継続を確認する。

■会话的有效时间

如果程序没有进行结束处理,将在较早的那种情况下结束。

    • php.ini記載の継続時間(xamppは1440秒)
    cookieの保存期間(デフォルトはブラウザ閉じマデ)

■溪流

1)开始会话
使用session_start获取并设置$_SESSION中的时间等数据。
2)在后续页面中保持会话
使用session_start进行同步,并判断$_SESSION中是否存在时间等数据。
3)结束会话

session_start();
$_SESSION['email']=$_POST['email'];

◆会话安全措施

为了安全防护,最好定期不定期地更新存储在Cookie中的ID。

session_regenerate_id(true);
智能手机是主流的现状下,频繁地进行此操作会导致与服务器的数据交互,并有可能导致会话断开。具体操作频率取决于开发负责人的判断。

◆从程序中结束会话

为了结束,需要执行以下步骤。

    1. 清除$_SESSION数据
    1. 删除cookie
    销毁会话
//1)
$_SESSION=array();

//2)
if(isset($_COOKIE[session_name()])):
    setcookie(session_name(),"",time()-1000);
    endif;//                       ̄ ̄ ̄今の時間より前に期限設定=即時破棄

//3)
session_destroy();
有些书只需要使用数字3,但要注意1和2的数据仍然会保留。

◆在JavaScript中的重新加载操作

浏览器后退,通过JavaScript返回的页面显示缓存内容,
没有与服务器的交互= PHP不会执行!

在这种情况下,如果要进行PHP处理,则需要使用JavaScript进行重新加载处理。

window.onpageshow=function(event){
    if(event.persisted){
//   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄キャッシュで表示している時にtrueを返す
        window.location.reload();
    }
}

◆使用PHP删除文件

unlink(相対パス);

◆创建留言板(教科书178页)

■1)新建一个数据库

在一个数据库中,可以拥有多个表。
就像Excel中的关系,”数据库”相当于”文件”,而”表”相当于”工作表”。

【步骤】
1. 从XAMPP打开MySQL,点击[Admin]按钮进入phpMyadmin。
2. 在左侧菜单中选择”新建”。
3. 输入数据库名称,选择”utf8~4_bin”。

■2)创建桌子

    • テーブル名の入力
    カラム数の設定

列数可以在之后进行扩展,但在输入数据后进行扩展是不现实的。
在开始之前确定哪些项目对应哪个表格!!

在表的”结构”选项卡中可以进行更改等操作
如果错误地设置为唯一,可以从下面的”索引”中进行删除

◆学习使用PHP进行数据库操作的指令(教材页码P189~)

型内容mysqliによる手続型旧MySQLからの移行が簡単mysqliによるオブジェクト型ほぼ使わないPDOによるオブジェクト型PHP5-6以降に作成されたものはほぼこれ

※PDO…不仅支持MySQL,还可以处理PostgreSQL和Oracle数据库的新命令。

如果是新项目开发,使用 PDO;如果是修改项目,则使用 mysqli(两种都要了解)。

与数据库的连接

$link = mysqli_connect('ホストサーバ','ログインid','ログインpass')

由于教科书过时,故其缺少了“i”。可以参考以下示例进行添加:$link = mysql_connect(~)

引数内容第1引数ホストサーバー第2引数DBのログインID第3引数DBのログインパスワード

建立与数据库的连接。以下为返回内容。

    • 成功:接続情報
    失敗:false

◆连接失败的错误消息

mysqli_error()

由于教科书已经过时,所以没有”i”,需要添加,例如mysql_error()。

连接失败的错误信息。(为什么会出现错误)

◆选择数据库

mysqli_select_db(接続情報,'DB名');

由于教科书过时,缺少了”i”。需要添加。
例如:mysql_select_db(‘oneline_bbs’, $link)。

引数内容第1引数接続情報第2引数DB名
注意,由于第1和第2与以往相反,请注意!

选择数据库。

「尽管这并不是教科书上的内容,但在此之后添加以下行!」

Note: Chinese sentences do not end with double exclamation marks as in English.

◆DB的字符编码设置

mysqli_set_charset(接続情報,'文字コード');
引数内容第1引数接続情報第2引数文字コード

使用PHP在MySQL数据库中设置字符编码。

mysqli_set_charset($link,'utf8');

◆与数据库断开连接

mysqli_close(接続情報);

由于教科书较旧,所以没有”i”选项。附上示例:mysql_close($link);

引数内容第1引数接続情報

DB和PHP程序结束时会自动断开连接,但考虑到对DB的独占访问,最好在不需要时显式地断开连接。
※为了缩短连接等待时间,尽早释放!

◆写入新的数据到数据库

INSERT INTO `テーブル名` (`カラム名`,...) VALUES (,...);

按照列名的顺序设置值。

「`」不是「’」(引号)的注意!!!!(Shift+@键)

◆写入DB时的转义处理

mysqli_real_escape_string(接続情報,エスケープする文字列)

由于教科书陈旧,缺少”i”;附加,例如mysql_real_escape_string(

引数内容第1引数接続情報第2引数エスケープする文字列

这个留言板

mysqli_real_escape_string($link,$name  )
                $comment)

执行创建的SQL命令

mysqli_query(接続情報,SQL文);

由於教科書的版本較舊,所以缺少「i」。需加上「i」,例如:mysql_query($link,$sql);

引数内容第1引数接続情報第2引数SQL文
因为古代的情况与第一和第二个并不相同,所以请注意!!

◆留言提交后的重定向

■ 头()功能

通过HTTP发送原始数据。可以用于重定向等。
※为了显示写入内容,请重新加载!

■位置

重定向指令

■ $_SERVER[]
– 服务器变量 $ _SERVER []

一个包含服务器信息的关联数组。

$_SERVER[‘HTTP_HOST’]

サーバのURL(~.co.jp/まで)

$_SERVER[‘REQUEST_URI’]

今開いているページ(.co.jp/~の、「~」部分)

header('Location: http://' .$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);

获取数据库的数据

■选择语句

SELECT `カラム名`... FROM `テーブル名`
//      ̄ ̄ ̄ ̄「*」で全カラム取得!

■选项(在↑后面继续写)

SQL内容WHERE句条件指定。'ago'>30などORDER BY句並び替え
ORDER BY `カラム名` DESC//…降順
//              ASC   …昇順

SELECT `username`,`pass` FROM `user_tbl` WHERE `username`=?

◆执行SELECT语句的结果

回覆如下。

    • 成功:要求データ
    失敗:false

可以从以下地方获取到这个数据的行数(数量)

mysqli_num_rows($変数)

※因为教科书很旧,所以没有”i”。添加上,例如:mysql_num_rows()。

引数内容第1引数SELECT文の実行結果を受けた変数

◆提取(截取并获取SELECT结果)

$変数 = mysqli_fetch_assoc($SELECT結果変数)

※教科书很老,缺乏“i”这一功能。 添加示例:mysql_fetch_assoc

执行一次后,将获取到的第一条数据剪切并赋值给变量。
如果没有传递数据,则赋值为“false”。

不是复制而是剪切,所以将从原始数据中消失!!
$post = mysqli_fetch_assoc($result)
fetch函数赋值的变量是数组!!(以列名为键的”关联数组”)

◆释放接收到SELECT结果的变量

mysqli_free_result($変数)

因为教科书过旧,所以没有了 “i”。需要添加。例:mysql_free_result(i)。

即使使用fetch对其进行了全取出,与数据库的连接也不会自动断开,仍然保留着。
如果不释放,之后对数据库的命令将会出现错误!

◆预编译语句 (Yu Yǔ Jù)

一种DB安全措施是使用不是real_escape_string的新方法来对用户输入的字符进行转义处理。

因为是后发制人,所以比real_escape_strings更先进!

将SQL语句存入变量中

変数 = mysqli_prepare(,);
引数内容第1引数接続情報第2引数SQL文(ただしユーザ入力文字の部分は「?」にする)
$sql=mysqli_prepare($link,'INSERT INTO ~('',…)')VALUES(?,)');

2)将「?」进行转义处理后,绑定

mysqli_stmt_bind_param(変数,順に型,順に値,)
引数内容第1引数SQL文の入った変数第2引数バインドする物の型を「?」の順番通りに(i…数値型、s…文字列型)第3引数以降バインドする値を「?」の順に
mysqli_stmt_bind_param($sql,'iss',$id,$name,$pass);

执行SQL语句

mysqli_stmt_execute();
引数内容第1引数SQL文の入った変数

4) 预编译语句结束 (Yu4 bian1 yi2 ju4 shi4 jie2)

mysqli_stmt_close();
引数内容第1引数SQL文の入った変数

请务必单独执行mysqli_close(~)!!

每次使用后立即关闭连接!!

在留言板上增加图片附件功能。

■关于图片

与$_FILES类似,保存后将相对路径保存在数据库中(即使是连接路径和文件名)。

※无法将图像存入数据库中。

(Paraphrase: 无法将图像记录在数据库中。)

将已经生成的相对路径添加到img表中

如果要进行评论

如果直接使用,会忽略用户输入的换行。
使用“nl2br()”这个命令,可以将换行代码转换为
,从而直接显示用户的换行。

nl2br(htmlspecialchars);
DB负责创建表、主键、以及创建第一个阶段,而无需插入INSERT INTO。
当错误发生时,会关闭数据库。
一般的查询会返回结果,而预处理语句的执行会返回true或false。

将数据库列中的内容进行更改

UPDATE `tbl名` SET `カラム名` =  WHERE レコードを選択する条件式
$sql=mysqli_prepare($link,"UPDATE `kaiin` SET `tel`=? WHERE `name`=?");
mysqli_stmt_bind_param

※SET 和 WHELE 都是两种选项,可以按照顺序出现(电话号码、姓名),不需要改变。

请注意,这个更新语句没有FROM子句!!!!!

◆删除数据库中的记录

DELETE FROM `tbl名` WHERE レコードを選択する条件式
$sql=mysqli_prepare($link,"DELETE FROM `kaiin` WHERE `name`=?");
mysqli_stmt_bind_param

◆输出CSV文件

将其转化为字符串

    • セルの横の区切りに「,」
    • セルの縦の区切りに「\r\n」
    を付与する(文字列の連結)
11.gif

如果有一个包含已创建的字符串的变量$str,
并且有一个包含要下载的文件名的变量$fname,

2)指定文件名

$fname = .csv;

3)指定DL文件的MIME类型

header('Content-type:text/csv');

使用PHP指定DL文件名。

header('Content-Disposition:attachment;filename='.$fname);

5)产出

echo $str;

※Shift-JIS的输出是,

echo mb_convert_encoding($str,'SJIS','UTF-8');
根据$str的创建连接进行处理!(顺序严格,不插入其他命令)

◆ 试试-捕获代码块

try{例外の発生する処理}
catch(Exception 変数名){例外発生時の処理}
finally{例外があってもなくても実行する処理}
throw new Exception('例外メッセージ');
我很少用”finally”(因为会在catch中中止)。

◆使用PDO进行数据库连接

try{変数名 = new PDO('mysql:host=localhost;dbname=DB名;charset=文字コード',
'DB接続のユーザID','〃パスワード',array(PDO::ATTR_EMULATE_PREPARES=>false));

在写作时,将需要修改的部分(日语)放入变量中会更方便。

在SQLi中等同于”$link=mysqli_connect~mysqli_charset”的部分!
对象类型使用 “->” (使用〇〇 到〇〇)
对数据库连接信息(变量),作出注释以便理解数据库获取过程(为了传递目的)
//DB接続情報
$dbname = 'mysql:host=localhost;dbname=DB名;charset=文字コード';
$id =  'root';
$pw =  '';
try {
    //DB取得処理
    $pdo = new PDO($dbname,$id,$pw,array(PDO::ATTR_EMULATE_PREPARES=>false));
}
catch(PDOException $e){
    die('DB接続失敗'.$e->getMessage());
//                ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄開発用なのであとでけす
$dsn = 'mysql:dbname=uriage;host=localhost';
$user = 'testuser';
$password = 'testuser';

try{
    $dbh = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

◆数据库处理完成(释放)

将新的PDO赋值给一个变量,并将”null”赋值给它。

$pdo = null;

◆如果未使用准备好(没有用户输入文本)

※将$pdo声明为新的PDO对象。
※$sql、$stmt是常用的变量名。

$sql=SQL命令文
$stmt=$pdo->prepare($sql)
$stmt->execute();
// ︙
$stmt=null;// ←開放する(close代わり

只选择“だけのやつ”中的所有项目。

只查询“だけのやつ”中的所有项目。

◆进行用户输入文本的转义处理

我将new PDO赋值给了$pdo。

$sql='INSERT INTO `tbl名`(`mail`,`pass`) VALUES(:mail,:pass)';
//                                       ̄「:~」で仮の変数
$stmt=$pdo->prepare($sql);
$stmt->bindParam(':mail',);// ←上記の「:~」に
$stmt->bindParam(':pass',);//      値をバインド
//     ̄ ̄ ̄ ̄ ̄※「bindParam」は変数、「bindValue」は変数・実数どちらも値に設定できる
$stmt->execute();
// ︙
$stmt=null;

※bindParam:用于执行(只传递变量名称) ← 变量在这边,
bindParam:直接评估写的那行(只传递变量的实际值) ← 实际值在这边…比较多!

因为名字没有特定的顺序,所以和mysqli不同,不是固定顺序!

从SELECT语句中提取检索到的数据。

※ 請將執行時的變數命名為 $stmt。

$stmt->fetch(PDO::FETCH_ASSOC)

将上述内容赋值给变量。
对于while情况,则将变量赋值作为条件表达式。

    • (PDO::FETCH_ASSOC)

カラム名とデータを持ってくる

()

添字でも回せるし、連想でも回せる形で取得(Wでとってくる無駄がある

既然不使用索引,使用FETCH_ASSOC就可以了。

◆PDO的选择行数(等同于mysqli_stmt_num_rows)

$sql='SELECT COUNT(*) FROM~WHERE~';

$stmt = $pdo -> prepare($sql);//あればプリペアド
$stmt -> execute();

$stmt->fetchColumn();

※在执行WHERE从句时

进行SQL查询以获取其他行数和行数据。

执行将变量 $sql 赋值,然后使用 $stmt 对准备好的语句进行执行,直到执行完成。
接下来,使用 $stmt->fetchColumn() 方法获取行数。

只需要数量的情况下

执行SELECT后,判断接收到的变量是否为false。如果为false,表示获取的数量为0!!!!

当发生〇件的情况时,使用SELECT COUNT(*)进行提取。

◆ 数据库中的字符编码差异!(包括排序规则的差异)

    • utf8bin:大文字小文字や、ひらがなカタカナなど全てを区別する
    • utf8_general_ci:大文字小文字を区別しない
    utf8_unicode_ci:ひらがなカタカタを区別しない。商品検索などに

◆内部连接(INNER JOIN)的概念是将两个表中满足连接条件的数据进行合并。

SELECT  FROM  INNER JOIN 結合するtbl名 ON キー

可以省略INNER,但明确指定是常见的。
同时,如果不指定ON运算符,则会以扣带连接的方式合并。

■ON 操作符

テーブル名.カラム名 = テーブル名.カラム名

在结合的tbl中,指定使用哪个列作为键。将tbl名称和列名用”.”连接起来,并用”=”连接表示匹配。

JOIN的基本概念是”内部连接”(省略缺失的记录)
为了区别与交叉连接JOIN,需要使用INNER关键词!

◆JOIN-外部合并(〇〇 OUTER JOIN)

SELECT  FROM  (LEFT ) OUTER JOIN 結合するtbl名 ON キー
//             (RIGHT)
//         ※ベースtblが左か右か

把两个tbl中基本tbl的数据与另一个tbl进行合并。

只有一个tbl中存在的数据的处理方式如下。

    • ベースtblにあり、結合tblに無い

結合tblに入る

ベースtblに無く、結合tblにある

結合tblに入らない!
※一つのシステムではLEFTかRIGHTのどちらかのみで統一するのが一般的。

使用phpMyAdmin直接输入数据。

从SQL界面删除A.I的列!!

◆喜欢运算符

在获取数据库数据时,使用“部分匹配”进行获取。
(在WHERE条件表达式中使用LIKE运算符)

SELECT  FROM  WHERE カラム名 LIKE %検索ワード%

获取包含搜索关键词的列名的值。

<要求>

%:0文字以上の任意

_:1文字の任意
※組み合わせて使用!!(__で2文字、_%で1文字以上、___%で3文字以上…など)

我昨天晚上在家里看了一部电影。

答)昨天晚上我在家里看了一部电影。

書き方意味%テレビ%テレビという文字列を含むものすべて3_年齢カラムで30代の人すべて_%テレビ_%テレビの前後に1文字以上の文字が入るもの全て

请使用“■_%\”作为搜索字符串!

由於百分號「%」具有特殊含義,而反斜杠「\」則用於進行轉義,因此需要在反斜杠前加上「\」進行轉義。

    • 「_」:\_

「%」:\%

「\」:\\

◆加密

password_hash(文字列,PASSWORD_DEFAULT)
//               ※一般的なモードこれ!
引数内容第1引数暗号化する文字列第2引数暗号化のモードを指定

无论原始字符串的长度如何,将长度超过60个字符的字符串进行加密。

■”PASSWORD_DEFAULT”是什么意思?

使用始終更新的算法进行加密,因此加密后的字符串可能会变得更长。

官方建议将数据库的长度设置为255!

◆加密后的一致性确认

password_verify(暗号化前,暗号化後)
引数内容第1引数暗号化前の値第2引数暗号化後の値

结果将会如下所示。

    • true :一致
    false:不一致

◆缓冲

PHP的缓冲区是指将输出内容存储在内存中而不是文件中。
(不会在屏幕上显示,而是写入到内存中!!)
通过在缓冲区中执行函数,可以将内存中的输出存储到变量中。

//バッファ開始
ob_start();

//バッファ終了&メモリ解放
ob_end_clean();

//バッファ中のメモリ書込み内容を取得
//変数にバッファ中の処理を格納。上書きではなく、後ろに追加していく!!
$変数=ob_get_contents();

只有在ob_start函数中使用ob_get_contents,否则一切都会被埋在黑暗中…NaNm

◆创建和保存新文件

创建一个新文件的指令。

file_put_contents(新規ファイルの相対パス,ファイルの中身);
引数内容第1引数新規ファイルの相対パス第2引数ファイルの中身

进行其他文件的加载(参见课本102页、105页)

require "ファイルのパス";

require/require_once

ファイルがないときFatalエラー

include/include_once

ファイルがないときwarning ※テスト用

~_once无法在同一文件中两次读取相同的文件。

在测试阶段,如果加载文件还没有准备好,可以使用“include”,
在加载文件完成后,可以切换到使用“require”等操作来处理。

只需阅读一次的事情,就要以事故预防为主!!

因为”include”只是为开发而保留的,所以不要留下它!!

require_once "ファイルのパス";

◆课堂(教科书第119页至)

class クラス名{
// ︙
}

在工厂制造的产品中,类似于“设计图”的东西。

■实例

类似于“量产品”的东西。(工厂出货状态)
创建实例需要使用“new运算符”。

在中国,可以有多个类的程序(可以单独运行)。
class {//←classはprivate/publicが必要
    private ~ //←privateは直接アクセスできない
    public ~ 
}

◆在类内的变量/函数

■如何访问

需要指定以下内容。

public :直接使用可

private :class内(インスタンス)からのみ使用可

protected:class内および継承(子)classのみで使用可

※ 不需要以上所述的设置。与public的处理方法类似。

■使用变量和函数

    • インスタンス内:「$this->変数名/関数名」
    • インスタンス外:「$インスタンス名->変数名/関数名」
    定数:「::」を使用

◆班级内部已决定的数量

const 定数名;

■实例内部

self::定数名
インスタンス内で定数にアクセス

■课外活动

クラス名::定数名
クラス外ではインスタンスなしにアクセス可能

◆类静态(具有共同值的变量)

public static $変数名;

echo $インスタンス::$変数名;
    • クラスの中にあり、定数ではなく(中身を変更でき)&全インスタンスで共通の値を持てる

publicと併用(インスタンスの生成に関係なくアクセス可)
アクセスは定数同様「::」「self」を用いる

即使从不同的实例访问,值仍然变得共享。

◆类别 – 构造函数

在创建实例时自动执行的函数。

需要时请适时接受值。

◆类-析构函数
在实例销毁时自动执行的函数。

<释放实例>

    • 明示する場合 :unset(インスタンス名)
    明示しない場合:PHPプログラム終了時に自動破棄
无法传递价值

◆命名空间

<?php
//※ファイルの1行目は絶対<?php
namespace エリア名;
//※2行目は絶対名前指定

为了确保在使用他人编写的程序时,避免变量/函数名的重复(冲突),我们引入了命名空间的概念,允许我们在代码区域内给变量和函数附加名称。

为了防止变量被覆盖,变量应该放在class中,因为变量没有适用于命名空间=覆盖!!
以前,我们会根据开发者来给代码添加名称。
广告
将在 10 秒后关闭
bannerAds