• <span id="edipa"></span>

    <span id="edipa"><small id="edipa"></small></span>
      <span id="edipa"></span>
      \n \n <\/body>\n<\/html>\n<\/pre>\n

      <\/p>コントローラーでwhileループを使用して、一度に1つずつセットから行を削除する方法を覚えていますか?

      \nCREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';\nGRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';\n<\/pre>\n

      pdostatementオブジェクトは、foreachループに渡すと、配列のように動(dòng)作するように設(shè)計(jì)されていることがわかります。したがって、しばらくの間ではなく、Foreachループを使用してデータベース処理コードをわずかに簡(jiǎn)素化できます。\n<\/em>\n<\/p>\n

      new PDO('mysql:host=hostname;dbname=database', 'username',\n  'password')\n<\/pre>この本の殘りの部分では、このTidier Foreachの形を使用します。\n

      別のきちんとしたツールPHPが提供するのは、Echoコマンドを呼び出す速記の方法です。これは、すでに見たように、頻繁に使用する必要があります。私たちのエコーステートメントは次のようになります:\n<\/em>\n代わりに、<\/p>これを使用できます:

      \n<\/p>\n

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',\n  'mypassword');\n<\/pre>これはまったく同じことをします。 速記を使用した更新されたテンプレートを次に示します。\n
      try {\n  ? do something risky\n}\ncatch (ExceptionType $e) {\n  ? handle the exception\n}\n<\/pre>例:mysql-listjokes-shorthand 

      \n<\/p>\n

      この時(shí)點(diǎn)から適用可能な速記表記を使用します。<\/p>\n

      <\/p>注:5.4以前のPHPのバージョンでは、この速記の表記法にはかなり珍しいPHP設(shè)定を有効にする必要があるため、互換性の理由で落膽しました。速記の表記法を使用した場(chǎng)合、コードが有効になっていないサーバーに移動(dòng)したときに動(dòng)作を停止した可能性があります。\n

      try {\n  $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',\n    ’mypassword’);\n  $output = 'Database connection established.';\n}\ncatch (PDOException $e) {\n  $output = 'Unable to connect to the database server.';\n}\n\ninclude  __DIR__ . '\/..\/templates\/output.html.php';\n<\/pre>\n

      PHP 5.4(最近現(xiàn)実的に遭遇するバージョン)の時(shí)點(diǎn)で、速記はPHP設(shè)定に関係なく機(jī)能するため、すべてのサーバーで動(dòng)作しないことを心配せずに安全に使用できます。<\/p>\n

      \n先に考える<\/em>\n<\/p>見た例では、ページを表示するために必要なすべてのHTMLが含まれるテンプレートjokes.html.phpを作成しました。ただし、當(dāng)社のウェブサイトが成長(zhǎng)するにつれて、さらにページを追加します。人々がウェブサイトにジョークを追加できるようにするページが必要です。また、入門テキストを備えたホームページ、所有者の連絡(luò)先の詳細(xì)を備えたページ、そしてサイトが成長(zhǎng)するにつれて、おそらくさえ、ホームページも必要です。人々がウェブサイトにログインできるページ。\n

      ここではかなり前に飛び込んでいますが、プロジェクトがどのように成長(zhǎng)するかを常に検討する価値があります。 jokes.html.phpに使用したばかりのアプローチを適用した場(chǎng)合、殘りのテンプレートにaddjoke.html.php、home.html.php、contact.html.php、login.html.phpなど - 私たちllは、繰り返されるコードがたくさんあります。\n<\/em>ウェブサイト上のすべてのページには、このようなものになるテンプレートが必要です。\n<\/p>\n

      プログラマーとして、繰り返しコードはあなたができる最悪のことの1つです。実際、プログラマーはしばしば「自分自身を繰り返さないでください」を表す乾燥原理を指します。コードのセクションを繰り返していることに気付いた場(chǎng)合、ほぼ間違いなくより良い解決策があります。<\/h2>\n

      最高のプログラマーはすべて怠zyであり、コードを繰り返すことは作業(yè)を繰り返すことを意味します。テンプレートにこのコピー\/貼り付けアプローチを使用すると、Webサイトの維持が非常に困難になります。各ページに表示したいフッターとナビゲーションセクションがあると想像しましょう。私たちのテンプレートは、次のようになります:<\/p>\n

      \nCREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';\nGRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';\n<\/pre>\n

      2022年に問題に遭遇します! Webサイト上のすべてのページのテンプレート - たとえば、jokes.html.php addjoke.html.php、home.html.php、contact.html.php andlogin.html.php - 上記の構(gòu)造にコードを含める場(chǎng)合「2022」の著作権通知で年を更新すると、各テンプレートを開き、日付を変更する必要があります。\nこの問題を回避するために、私たちは賢く、サーバーのクロック(エコー日付( 'y');)から動(dòng)的に読み取ることができますが、

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

      目次
      次の例を考えてみましょう。これは、第3章で作成したジョークテーブルを作成しようとします
      プログラマーとして、繰り返しコードはあなたができる最悪のことの1つです。実際、プログラマーはしばしば「自分自身を繰り返さないでください」を表す乾燥原理を指します。コードのセクションを繰り返していることに気付いた場(chǎng)合、ほぼ間違いなくより良い解決策があります。
      php&mysql:初心者から忍者、第7版
      Web上にMySQLからのデータの表示に関するFAQ
      Webブラウザーを使用してMySQLデータベースに接続するにはどうすればよいですか?
      MySQLデータベースを保護(hù)するにはどうすればよいですか? 。まず、ファイアウォールやその他の適切なセキュリティ対策により、MySQLサーバーが安全な環(huán)境で実行されていることを確認(rèn)します。次に、MySQLアカウントに強(qiáng)力で一意のパスワードを使用します。第三に、MySQLアカウントの特権を制限して、タスクを?qū)g行するために必要な権限のみがあるようにします。最後に、既知の脆弱性から保護(hù)するためにMySQLサーバーを定期的に更新してパッチを當(dāng)てます。
      MySQLデータベースにデータをインポートするにはどうすればよいですか?
      mysqlデータベースからデータをエクスポートするにはどうすればよいですか?
      ホームページ バックエンド開発 PHPチュートリアル WebでMySQLからのデータの表示:はじめに

      WebでMySQLからのデータの表示:はじめに

      Feb 08, 2025 am 09:45 AM

      WebでMySQLからのデータの表示:はじめに

      次の記事は、php&mysqlからの抜粋です:Novice to Ninja、7th Edition、プロのWebアプリケーションを構(gòu)築するために必要なすべてのツール、原則、およびテクニックを?qū)W習(xí)するための実踐ガイドです。シリーズのこの最終チュートリアルでは、MySQLデータベースに保存されている情報(bào)を取得し、すべての人が表示されるようにWebページに表示する方法を?qū)Wびます。


        docker
      • でPHP開発環(huán)境を設(shè)定します
      • PHP
      • の初心者向けガイド
      • mysqlの導(dǎo)入:初心者向けガイド
      • Web上のMySQLからのデータの表示:はじめに

      これはそれです - あなたがサインアップしたもの!この章では、MySQLデータベースに保存されている情報(bào)を取得し、すべての人が表示されるようにWebページに表示する方法を?qū)Wびます。

      これまでのところ、最初のPHPコードを作成し、リレーショナルデータベースエンジンであるMySQLの基本と、サーバー側(cè)のスクリプト言語(yǔ)であるPHPを?qū)Wびました。

      ここで、これらのツールを一緒に使用して、ユーザーがデータベースからデータを表示したり、獨(dú)自のデータを追加できるWebサイトを作成する方法を?qū)Wぶ準(zhǔn)備ができています。

      注:第3章のように、ここでは「mysql」を使用してデータベースプロトコルを參照しています。あなたのPHPスクリプトは同じことをします。この章には、実際にMariadBデータベースに接続しているにもかかわらず、「mysql」に書くために、PHPコードに記載されている多くの參照があります。

      全體像

      前進(jìn)する前に、私たちの究極の目標(biāo)を明確に描くために一歩後退する価値があります。 PHPスクリプト言語(yǔ)とMySQLデータベースエンジンという2つの強(qiáng)力なツールがあります。これらがどのように合うかを理解することが重要です

      當(dāng)社のWebサイトにMySQLを使用する目的は、データベースからコンテンツを動(dòng)的にプルして、通常のブラウザで表示するためのWebページを作成できるようにすることです。したがって、システムの一端に、Webブラウザーを使用してページをリクエストするためにサイトに訪問者がいます。そのブラウザは、見返りに標(biāo)準(zhǔn)のHTMLドキュメントを受信することを期待しています。もう一方の端には、SQLクエリ(コマンド)に応答する方法のみを理解するMySQLデータベースの1つ以上のテーブルにあるサイトのコンテンツがあります。 WebでMySQLからのデータの表示:はじめに

      上の畫像に示されているように、PHPスクリプト言語(yǔ)は両方の言語(yǔ)を話す間の間にあります。ページリクエストを処理し、第3章でジョークのテーブルを作成するために使用したものと同じように、SQLクエリを使用してMySQLデータベースからデータを取得します。その後、ブラウザが期待する適切にフォーマットされたHTMLページとして動(dòng)的に吐き出します。 >

      ちょうどそれはあなたの心の中ではっきりと新鮮です、これはあなたのウェブサイトのページへの訪問者がいるときに起こることです:

      1. 訪問者のWebブラウザは、WebサーバーからWebページをリクエストします。
      2. Webサーバーソフトウェア(通常はApacheまたはNginx)は、要求されたファイルがPHPスクリプトであることを認(rèn)識(shí)しているため、サーバーはPHPインタープリターを起動(dòng)してファイルに含まれるコードを?qū)g行します。
      3. 特定のPHPコマンド(この章の焦點(diǎn)になります)は、MySQLデータベースに接続し、Webページに屬するコンテンツをリクエストします。
      4. MySQLデータベースは、要求されたコンテンツをPHPスクリプトに送信することで応答します。
      5. PHPスクリプトは、コンテンツを1つ以上のPHP変數(shù)に保存し、Echoステートメントを使用してWebページの一部としてコンテンツを出力します。
      6. PHPインタープリターは、Webサーバーに作成したHTMLのコピーを手渡すことで仕上げられます。
      7. Webサーバーは、HTMLファイルからHTMLファイルから直接來る代わりに、PHPインタープリターによって提供される出力であることを除いて、HTMLをWebブラウザーに送信します。ただし、ブラウザにはこれを知る方法はありません。ブラウザに関する限り、それは他のものと同様にWebページを要求して受信しています。
      8. mySQLユーザーアカウントの作成
      9. PHPがMySQLデータベースサーバーに接続するためには、ユーザー名とパスワードを使用する必要があります。これまでのところ、ジョークデータベースに含まれているのは、多くのpithy
      10. bon mots
      11. だけですが、やがて、メールアドレスやウェブサイトのユーザーに関するその他の個(gè)人的な詳細(xì)などの機(jī)密情報(bào)が含まれている場(chǎng)合があります。このため、MySQLは非常に安全であるように設(shè)計(jì)されており、どの接続が受け入れられ、それらの接続が許可されているかを厳密に制御できます。
      12. docker環(huán)境には、第3章に既にMySQLユーザーが含まれています。これは、MySQLサーバーにログインするために既に使用されています。
      ウェブサイトが依存するIJDBデータベースで作業(yè)するために必要な特定の特権のみを備えた新しいユーザーアカウントを作成する必要があります。今すぐやってみましょう。

      ユーザーを作成するには、MySQLワークベンチを開き、サーバーに接続します。次に、次のクエリを?qū)g行します

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      最初のクエリはかなり自明です。パスワードmyPasswordを使用してijdbuserというユーザーを作成します。ユーザー名の後の%記號(hào)は、データベースを任意の場(chǎng)所から接続できることを示します。 2番目のクエリでは、ユーザーにIJDBスキーマへの完全なACCEが得られます。その結(jié)果、このユーザーはIJDBスキーマのすべてのテーブル、列、データを確認(rèn)および変更できますが、外部のものにはアクセスできません。

      ユーザーijdbuserが作成されたので、それを使用してデータベースに接続できます。このユーザーとのMySQLワークベンチで接続を設(shè)定することは可能ですが、許可が限られているため、V.JEアカウントを使用してMySQLワークベンチを維持することをお?jiǎng)幛幛筏蓼埂4铯辘?、PHPスクリプトから接続するときに新しいユーザーを使用します。

      php

      でmysqlに接続します

      Webページに含めるためにMySQLデータベースからコンテンツを取得する前に、PHPスクリプト內(nèi)からMySQLへの接続を確立する方法を知っている必要があります。これまでのところ、MySQL Workbenchというアプリケーションを使用してデータベースに接続しています。 MySQLワークベンチが実行中のMySQLサーバーに直接接続できるように、獨(dú)自のPHPスクリプトもできます。 この章では、PHPからMySQLに接続することについて完全に説明していますが、実際に前の章で説明したMariaDBデータベースに接続しています。 PHPは、MySQLとMariadBが交換可能であるため、違いを確認(rèn)できません。使用されるすべてのコマンドを使用してMySQLまたはMariaDBデータベースサーバーに接続できるため、データベースをMySQLと呼びます。

      元のMySQLデータベースは、MySQLワークベンチやPHPなど、

      クライアント

      にサーバーと通信するための標(biāo)準(zhǔn)化されたメソッドを提供しました。 Mariadbはその標(biāo)準(zhǔn)をコピーし、PHPのすべてのコマンドは名前

      mysql

      という名前を使用しているため、物事をシンプルに保つために、この章を通して

      mysql という用語(yǔ)を使用してデータベースを參照します。 phpからmysqlサーバーに接続する方法は3つあります: mysqlライブラリ

      mysqliライブラリ

        PDOライブラリ
      • これらはすべて基本的に同じジョブを行います - データベースに接続してそれにクエリを送信します - しかし、彼らはそれを達(dá)成するために異なるコードを使用します。
      • MySQLライブラリは、データベースに接続する最も古い方法であり、PHP 2.0で導(dǎo)入されました。それに含まれる機(jī)能は最小限であり、PHP 5.0(2004年にリリース)時(shí)點(diǎn)でMySqliに取って代わられました。 古いmysqlライブラリを使用してデータベースを接続および照會(huì)するには、mysql_connect()やmysql_query()などの関數(shù)が使用されます。これらの機(jī)能は、PHP 5.5以降、PHP 7.0から完全に削除されているため、避けられるべきです。

        PHP 5.0がリリースされるとすぐに、ほとんどの開発者は変更の理由を見ましたが、MySQLIが事実上されているという事実にもかかわらず、これらの現(xiàn)在存在しないMySQL_*機(jī)能を使用してWeb上に何百もの記事とコード例があります。 15年間の優(yōu)先ライブラリ。

        行mysql_connect()を含むコードの例に出くわした場(chǎng)合は、記事の日付を確認(rèn)してください。それはおそらく2000年代初頭からであり、プログラミングでは、それほど古いものを決して信用すべきではありません。物事は常に変わります - そのため、この本は第7版にあります!

        PHP 5.0では、「MySQLの改善」の立場(chǎng)にあるMySQLIライブラリは、元のMySQLライブラリの制限の一部に対処するためにリリースされました。コードはmysqli_connect()やmysqli_query()などの関數(shù)を使用するため、mysqliの使用を簡(jiǎn)単に識(shí)別できます。

        PHP 5.0でMySQLIライブラリがリリースされた直後に、PHP 5.1がリリースされ、今日のPHPの書き方を形作るのに役立つかなりの數(shù)の変更があります(主にオブジェクト指向のプログラミングを使用します。この本の後半でたくさん)。 PHP 5.1の主要な変更の1つは、MySQLデータベースに接続するために、3番目のライブラリP(guān)DO(PHPデータオブジェクト)を?qū)毪筏郡长趣扦筏俊?

        PDOとMySqliにはいくつかの違いがありますが、主なものは、PDOライブラリを使用して、OracleサーバーやMicrosoft SQL Serverなどのほぼすべてのデータベースサーバーに接続できることです。開発者にとって、この一般的なアプローチの最大の利點(diǎn)は、ライブラリを使用してMySQLデータベースと対話する方法を?qū)Wんだことです。別のデータベースサーバーと対話するのは非常に簡(jiǎn)単です。

        間違いなく、PDOのコードを作成するのは簡(jiǎn)単であり、PDOコードをより読みやすくすることができるいくつかのニュアンスがあります。 (心配しないでください、それが後で何を意味するのかを説明します。)

        これらの理由で、最新のPHPプロジェクトはPDOライブラリを使用しています。これは、この本での使用方法を紹介するライブラリです。違いの詳細(xì)については、SitePointの記事「PDOの再導(dǎo)入 - PHPのデータベースにアクセスする正しい方法」をご覧ください。

        その小さな歴史のレッスンの後、あなたはおそらくコードを書くことに戻りたいと思っています。 PDOを使用してMySQLサーバーへの接続を確立する方法は次のとおりです。

        今のところ、新しいPDOを第2章で使用したRAND関數(shù)と同様に、組み込み関數(shù)と考えてください。名前!いずれにせよ、3つの引數(shù)が必要です

        • データベースのタイプを指定する文字列(mysql :)、サーバーのホスト名(host = hostname;)、およびデータベースの名前(dbname = database)
        • phpを使用したいmysqlユーザー名
        • そのユーザー名のmysqlパスワード
        第2章から、PHP関數(shù)は通常、呼び出されたときに値を返すことを覚えているかもしれません。この新しいPDO「関數(shù)」は、確立された接続を識(shí)別するPDOオブジェクトと呼ばれる値を返します。接続を利用するつもりなので、変數(shù)に保存してこの値を保持する必要があります。データベースに接続するために必要な値が記入された狀態(tài)で、それがどのように見えるかを次に示します。

        おそらく、最後の2つの引數(shù)で何が起こっているのかを見ることができます。これらは、この章で作成したユーザー名とパスワードです。
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      最初の議論はもう少し複雑です。 dbname = ijdbパーツは、ijdbと呼ばれるデータベース(

      schema

      とも呼ばれる)を使用するようにpdoに指示します。 PHPから実行されるクエリは、そのスキーマのテーブルにデフォルトになります。 [JOKEから]を選択します。IJDBスキーマのジョークテーブルからレコードを選択します。

      PHP、PDO、およびMySQLにすでに精通していても、Host = MySQLパーツは混亂しているように見えます。通常、これはhost = localhost(ローカルコンピューター、PHPを?qū)g行しているのと同じマシンを參照)、またはhost = sitepoint.com。 なぜHOST = MySQLで、MySQLはここで何を參照していますか? dockerでは、各サービス

      に名前が付けられています。サーバーを構(gòu)成するdocker-compose.ymlファイルを調(diào)べると、データベースサービスはmysqlと呼ばれ、Dockerでは、あるサービスが他のサービスの名前を使用して別のサービスに接続できます。

      引數(shù)はさておき、ここで見ることが重要なのは、新しいPDOによって返される値が$ PDOという名前の変數(shù)に保存されていることです。

      MySQL Serverは、Webサーバーとは完全に個(gè)別のソフトウェアです。したがって、ネットワークの停止のためにサーバーが利用できないか、アクセスできない可能性を考慮する必要があります。そのような場(chǎng)合、新しいPDOは実行されず、PHP例外をスローします。

      注:少なくともデフォルトでは、PHPを構(gòu)成することができるため、例外がスローされず、単に接続できません。これは一般的に望ましい動(dòng)作ではありません。何が間違っていたのかを解決するのがはるかに難しくなるためです。 「PHP例外を投げる」ことが何を意味するのか疑問に思っているなら、あなた自身を締めます! PHP言語(yǔ)のいくつかの機(jī)能を発見しようとしています。

      PHP例外は、PHPにタスクを?qū)g行するように指示すると何が起こり、それを行うことができません。 PHPは、それが言われたことをしようとしますが、失敗します。そして、失敗について話すために、それはあなたに例外を投げかけます。例外は、特定のエラーメッセージでPHPがクラッシュするだけです。例外がスローされると、PHPは停止します。エラーが実行された後のコード行はありません。

      責(zé)任ある開発者として、その例外をキャッチしてそれについて何かをすることはあなたの仕事です。

      注:例外をキャッチしない場(chǎng)合、PHPはPHPスクリプトの実行を停止し、壯大な醜いエラーメッセージを表示します。そのエラーメッセージは、エラーを投げたスクリプトのコードさえ表示されます。この場(chǎng)合、そのコードにはMySQLのユーザー名とパスワードが含まれているため、ユーザーが表示されているエラーメッセージを回避することが特に重要です! 例外をキャッチするには、試してみると例外をスローする可能性のあるコードを囲む必要があります... catchステートメント:

      試してみることができます... if…elseステートメントのようなステートメントをキャッチします。

      まだ混亂していますか?私はあなたに多くの新しい概念を投げていることを知っています(しゃれはありません)が、私がそれをすべてまとめて私たちが持っているものをあなたに見せたら、それはより理にかなっています:
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      ご覧のとおり、このコードは試してみてください…CATCHステートメント。上部のトライブロックでは、新しいPDOを使用してデータベースに接続しようとします。これが成功した場(chǎng)合、結(jié)果のPDOオブジェクトを$ PDOに保存して、新しいデータベース接続を操作できるようにします。接続が成功した場(chǎng)合、$ output変數(shù)は後で表示されるメッセージに設(shè)定されます。

      重要なことに、試してみてください。ステートメントをキャッチします。例外がスローされた後のコードは実行されません。この場(chǎng)合、データベースに接続すると例外がスローされます(パスワードが間違っているか、サーバーが応答していないかもしれません)、$出力変數(shù)は「データベース接続の確立」に設(shè)定されることはありません。

      データベース接続の試行が失敗した場(chǎng)合、PHPはPDOExceptionをスローします。これは、新しいPDOがスローする例外のタイプです。したがって、私たちのキャッチブロックは、PDOExceptionをキャッチする(そして$ eという名前の変數(shù)に保存する)と述べています。そのブロック內(nèi)で、変數(shù)$ outputを設(shè)定して、何がうまくいかなかったかについてのメッセージが含まれています。 ただし、このエラーメッセージは特に役立ちません。 PDOがデータベースサーバーに接続できなかったということです。それがなぜであるかについての情報(bào)を持っている方が良いでしょう - たとえば、ユーザー名とパスワードが無効だったからです。
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      $ e変數(shù)には、問題を説明するエラーメッセージなど、発生した例外に関する詳細(xì)が含まれています。連結(jié)を使用してこれを出力変數(shù)に追加できます:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      注:$ e変數(shù)は文字列ではなくオブジェクトです。それがまもなく意味することになります。ただし、今のところ、知っておくべきことは、コード$ e-> getMessage()が発生した特定の例外に基づいてエラーメッセージを取得することです。 if…elseステートメントのように、試してみる2つのブランチの1つ…catchステートメントが実行されることが保証されています。 Tryブロックのコードが正常に実行されるか、Catchブロックのコードが実行されます。データベース接続が成功したかどうかに関係なく、$ output変數(shù)にメッセージがあります - エラーメッセージ、または接続が成功したというメッセージのいずれか。

      最後に、Tryブロックが成功したか、キャッチブロックが実行されたかに関係なく、テンプレートoutput.html.phpが含まれています。これは、ページにテキストを表示するだけの一般的なテンプレートです。

      完全なコードは、例:mysql-connect。

      テンプレートが含まれている場(chǎng)合、エラーメッセージまたは「データベース接続の確立」メッセージのいずれかが表示されます。
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      前述のコードがあなたにある程度理にかなっていることを願(yuàn)っています。このセクションの最初に戻って、迷子になった場(chǎng)合はもう一度読んでください。ただし、コードをしっかりと把握したら、おそらく私がまだ説明されていない1つの謎、PDOを殘したことに気付くでしょう。新しいPDOとは正確には、「PDOオブジェクト」を返すと言ったとき、正確にオブジェクトとは何ですか?

      注:ダウンロードされたサンプルコードには、ijdb_sampleというスキーマとijdb_sampleというユーザーが含まれているため、スキーマとユーザーと呼ばれるものに関係なく実行できるようにします。データベースを含むファイルは、データベースとして提供されています。これをインポートできます。

      提供されたWebベースのサンプルコードビューアーを使用すると、サンプルをロードするときにIDBJ_Sampleデータベースが作成されますが、このスキーマの変更は別のサンプルを表示すると失われます。 (物事を臺(tái)無しにして、別のサンプルとバックに切り替えるとリセットされますが、変更した変更を保持したい場(chǎng)合は、作成したスキーマにします。)

      MySQL Workbenchを使用してサンプルデータをスキーマにロードする場(chǎng)合は、データのインポート/復(fù)元を選択してProject DirectoryからDatabase.sqlをインポートします。次に、自己完結(jié)型ファイルからインポートを選択し、Database.sqlを參照し、デフォルトのターゲットスキーマでスキーマ名を選択します。同じ名前のテーブルを作成した場(chǎng)合、それらは上書きされ、すべてのレコードが失われます。 オブジェクト指向プログラミングのクラッシュコース

      前のセクションでは、「オブジェクト」という言葉が私の語(yǔ)彙に忍び込んできたことに気づいたかもしれません。 PDOはPHPデータ

      オブジェクト

      拡張子であり、新しいPDOはPDO オブジェクトを返します。このセクションでは、オブジェクトが何であるかを説明したいと思います。

      おそらく、PHPまたは一般的なプログラミングの獨(dú)自の調(diào)査で、オブジェクト指向プログラミング(OOP)という用語(yǔ)に出くわしたことでしょう。 OOPは、多くの部品を備えた非常に複雑なプログラムを構(gòu)築することに特に適したプログラミングの高度なスタイルです。今日アクティブに使用されているほとんどのプログラミング言語(yǔ)は、OOPをサポートしています。それらのいくつかは、 をoopスタイルで作業(yè)することを要求しています。 PHPはそれについてもう少し気まぐれであり、oopスタイルでスクリプトを書くかどうかを決定するために開発者に任せます。

      これまでのところ、PHPコードをProceduralプログラミングと呼ばれるよりシンプルなスタイルで作成しました。今のところ、後でオブジェクトをより詳細(xì)に調(diào)べても続けます。手続きスタイルは、現(xiàn)在取り組んでいる比較的単純なプロジェクトに適しています。ただし、遭遇するほぼすべての複雑なプロジェクトは、OOPを使用しています。この本の後半で詳しく説明します。

      とは、MySQLデータベースに接続して作業(yè)するために使用するPDO拡張機(jī)能は、オブジェクト指向のプログラミングスタイルで設(shè)計(jì)されています。これは、単に関數(shù)を呼び出してMySQLに接続してからその接続を使用する他の関數(shù)を呼び出すのではなく、最初にデータベース接続を表すPDO

      オブジェクトを作成し、次にの機(jī)能を使用する必要があることを意味します。データベースで動(dòng)作するオブジェクト

      オブジェクトを作成することは、関數(shù)を呼び出すことによく似ています。実際、あなたはすでにそれを行う方法を見てきました:

      新しいキーワードは、新しいオブジェクトを作成することをPHPに指示します。次に、スペースを殘してクラス名を指定します。クラス名は、作成したいオブジェクトの種類をPHPに伝えます。クラスは、PHPがオブジェクトを作成するために従うような一連の指示です。クラスは、ケーキなどのレシピであると考えることができます。また、オブジェクトはレシピに続くことから生成された実際のケーキです。さまざまなレシピが異なる料理を生産できるのと同じように、異なるクラスが異なるオブジェクトを生成できます。

      PHPには、呼び出すことができる組み込み関數(shù)がたくさん付屬しているように、PHPにはオブジェクトを作成できるクラスのライブラリが付屬しています。したがって、新しいPDOは、PHPに新しいPDOオブジェクトを作成するように指示します。つまり、組み込みのPDOクラスの新しいオブジェクトです。

      PHPでは、オブジェクトは、文字列、數(shù)字、または配列のような値です。オブジェクトを変數(shù)に保存するか、それを引數(shù)として関數(shù)に渡すことができます。他のPHP値でできるすべてのことです。ただし、オブジェクトにはいくつかの便利な追加機(jī)能があります

      まず、オブジェクトは、他の値のコンテナとして機(jī)能するという點(diǎn)で、配列のように動(dòng)作します。第2章で見たように、インデックス(たとえば、$誕生日['kevin']など)を指定することにより、配列內(nèi)の値にアクセスできます。オブジェクトに関しては、概念は似ていますが、名前とコードは異なります。配列インデックスに保存されている値にアクセスするのではなく、オブジェクトのプロパティにアクセスしていると言います。正方形の括弧を使用してアクセスするプロパティの名前を指定する代わりに、矢印表記( - >)を使用します。たとえば、$ myobject-> someproperty:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      アレイは通常、類似した値(誕生日の配列など)のリストを保存するために使用されますが、オブジェクトは関連値のリストを保存するために使用されます(たとえば、たとえば、データベース接続のプロパティ)。それでも、それがすべてのオブジェクトがそうであった場(chǎng)合、それらにあまり重要ではないでしょう:私たちはこれらの値を保存するために配列を使用することもできますよね?もちろん、オブジェクトはもっと多くのことをします

      プロパティとその値のコレクションを保存することに加えて、オブジェクトには、より便利な機(jī)能をもたらすように設(shè)計(jì)された機(jī)能のグループを含めることができます。オブジェクトに保存されている関數(shù)は、メソッドと呼ばれます(プログラミングの世界では、私に尋ねると、より紛らわしい名前の1つ)。メソッドは、クラス內(nèi)の機(jī)能です。さらに紛らわしいのは、獨(dú)自のクラスを作成すると、関數(shù)キーワードを使用してメソッドが定義されています。経験豊富な開発者でさえ、しばしば誤って

      functionメソッドを互換性があります。

      メソッドを呼び出すには、矢印表記を再度使用します - $ myobject-> somemethod():

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      スタンドアロン関數(shù)と同様に、メソッドは引數(shù)を取り、値を返すことができます。 この段階では、これはおそらく少し複雑で無意味に聞こえますが、私を信頼してください。変數(shù)(プロパティ)と関數(shù)(方法)のコレクションをオブジェクトと呼ばれる小さなバンドルにまとめると特定のタスクのコード - データベースの1つにすぎないデータベースを使用します。ある日、獨(dú)自の考案のオブジェクトを作成するために使用できるカスタムクラスを開発することもできます。 ただし、今のところ、PHPに含まれるクラスに固執(zhí)します。作成したPDOオブジェクトで作業(yè)し続け、その方法の1つを呼び出すことで何ができるかを見てみましょう。 接続の構(gòu)成

      これまでのところ、PDOオブジェクトを作成してMySQLデータベースとの接続を確立する方法と、何か問題が発生したときに意味のあるエラーメッセージを表示する方法を紹介しました。

      ただし、接続が成功すると仮定すると、使用する前に構(gòu)成する必要があります。新しいPDOオブジェクトのメソッドを呼び出すことで、接続を構(gòu)成できます。

      データベースにクエリを送信する前に、データベース接続の文字エンコードを構(gòu)成する必要があります。第2章で簡(jiǎn)単に述べたように、WebサイトでUTF-8エンコードされたテキストを使用して、サイトのフォームに記入するときにユーザーが自由に使用できるキャラクターの範(fàn)囲を最大化する必要があります。デフォルトでは、PHPがMySQLに接続すると、UTF-8ではなくよりシンプルなISO-8859-1(またはラテン-1)エンコードを使用します。そのままにしておくと、中國(guó)語(yǔ)、アラビア語(yǔ)、またはほとんどの非英語(yǔ)のキャラクターを簡(jiǎn)単に挿入することはできません。

      あなたのウェブサイトが英語(yǔ)の話者のみが使用することを100%確信していても、文字セットを設(shè)定しないことによって引き起こされる他の問題があります。 WebページがUTF-8に設(shè)定されていない場(chǎng)合、Curly Quotesなどの特定の文字をテキストボックスに書くと問題が発生します。データベースに別の文字として表示されるためです。 したがって、UTF-8エンコードを使用するように新しいPDOオブジェクトを設(shè)定する必要があります。

      データベースを照會(huì)するときにデータベースをクエリするときにUTF-8を使用するようにPHPに指示できます; charset = utf8mb4接続文字列に。 PHPスクリプトがUTF-8(最近のPHPバージョンのデフォルト)としてブラウザに送信されている場(chǎng)合、これを行うには欠點(diǎn)がありません。

      注:検索に行くと、charsetを設(shè)定するさまざまな方法があります。この本の以前の版では、このコードを使用するように指示されました。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      これは、PHP 5.3.6まで、PHPによってcharSetオプションが正しく適用されなかったためです。これは実際に使用する任意のPHPバージョンで修正されているため、接続文字列の一部としてcharsetを設(shè)定することは優(yōu)先オプションです。

      MySQLに接続してからその接続を構(gòu)成するために使用する完全なコードを以下に示します。 例:mysql-connect-complete

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      ブラウザでこの例を起動(dòng)します。 (パブリックディレクトリ內(nèi)のindex.phpにデータベースコードを配置し、output.html.phpファイルをテンプレートディレクトリ內(nèi)に配置した場(chǎng)合、ページのURLはhttps://v.je/。)

      サーバーが稼働していて、すべてが正常に機(jī)能している場(chǎng)合、成功を示すメッセージが表示されるはずです。

      PHPがMySQLサーバーに接続できない場(chǎng)合、または提供したユーザー名とパスワードが正しくない場(chǎng)合、代わりに以下に示すものと同様の畫面が表示されます。エラー処理コードが適切に機(jī)能していることを確認(rèn)するには、パスワードを意図的に間違えてテストすることをお?jiǎng)幛幛筏蓼埂?

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      

      キャッチブロックのおかげで、データベースからのエラーメッセージがページに含まれています。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      メソッドgetMessage()は、発生した例外を説明するメッセージを返します。例外がスローされたファイル名と行番號(hào)を返すためのgetFile()やgetLine()を含むいくつかの方法があります。このような非常に詳細(xì)なエラーメッセージを生成できます。

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      これは、數(shù)十のインクルードファイルを備えた大きなWebサイトがある場(chǎng)合、非常に便利です。エラーメッセージは、どのファイルを調(diào)べるか、どの線がどのラインで発生したかを正確に示します。

      興味がある場(chǎng)合は、データベース接続コード(たとえば、誤ったデータベース名)に他のいくつかの間違いを挿入して、結(jié)果の詳細(xì)なエラーメッセージを観察してみてください。完了し、データベース接続が正しく動(dòng)作している場(chǎng)合は、単純なエラーメッセージに戻ります。これにより、データベースサーバーに真の問題が発生した場(chǎng)合、訪問者は技術(shù)的なGobbledyGookで攻撃されません。

      接続が確立され、データベースが選択されている場(chǎng)合、データベースに保存されているデータの使用を開始する準(zhǔn)備が整いました。

      スクリプトの実行が終了した後、MySQLサーバーとの接続に何が起こるのか疑問に思うかもしれません。本當(dāng)に必要な場(chǎng)合は、接続を表すPDOオブジェクトを破棄することにより、PHPにサーバーから切斷するように強(qiáng)制できます。オブジェクトを含む変數(shù)をnullに設(shè)定することにより、これを行います:

      と言った、PHPはスクリプトの実行が終了したときに開いているデータベース接続を自動(dòng)的に閉じます。そのため、通常、PHPをクリーンアップさせることができます。

      php
      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      でSQLクエリを送信します

      第3章では、MySQLワークベンチを使用してMySQLデータベースサーバーに接続しました。これにより、SQLクエリ(コマンド)を入力し、それらのクエリの結(jié)果をすぐに表示できます。 PDOオブジェクトは、同様のメカニズムを提供します - execメソッド:

      ここで、$ queryは、実行するsqlクエリを含む文字列です。 ご存知のように、クエリの実行に問題がある場(chǎng)合(たとえば、SQLクエリでタイピングミスを犯した場(chǎng)合)、このメソッドはPDOExceptionをスローします。

      次の例を考えてみましょう。これは、第3章で作成したジョークテーブルを作成しようとします

      例:mysql-create

      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      

      同じTry Try ... Catchステートメント手法を使用して、クエリによって生成された可能性のあるエラーを処理することに注意してください。複數(shù)の試行を使用することは可能です...キャッチブロックをキャッチして、さまざまなエラーメッセージを表示します。1つは接続用、もう1つはクエリ用です - これにより、かなりの量の追加コードが発生する可能性があります。

      代わりに、同じTRYステートメントを使用して、接続とクエリの両方を含めることを選択しました。 try…catch blockはエラーが発生したらコードの実行を停止するため、データベース接続中にエラーが発生した場(chǎng)合、$ pdo-> exec($ run)行は実行されず、クエリがデータベースに送信された場(chǎng)合を確認(rèn)します。 、接続が確立されている必要があります

      このアプローチにより、表示されているエラーメッセージに対する制御が少し少なくなりますが、Tryのタイピングを保存します。各データベース操作のステートメントをキャッチします。この本の後半では、これらをさまざまなブロックに分割しますが、今のところ、すべてのデータベース操作を同じTryブロックに保持します。

      この例では、getMessageメソッドも使用して、MySQLサーバーから詳細(xì)なエラーメッセージを取得します。次の畫像は、たとえば、ジョークテーブルがすでに存在する場(chǎng)合に表示されるエラーを示しています。

      WebでMySQLからのデータの表示:はじめに削除、挿入、および更新クエリ(保存されたデータを変更するのに役立つ)の場(chǎng)合、execメソッドはクエリの影響を受けたテーブル行(エントリ)の數(shù)を返します。次のSQLコマンドを考えてみましょう。これを第3章で使用して、「プログラマー」という言葉を含むすべてのジョークの日付を設(shè)定します。

      例:mysql-update

      execメソッドから返された値を$ hiblectedRowsで保存することにより、テンプレートに印刷するために$ output変數(shù)の変數(shù)を使用できます。

      以下の畫像は、データベースに「プログラマー」ジョークが1つしかないと仮定して、この例の出力を示しています。
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      同じクエリを再度実行するためにページを更新する場(chǎng)合、次の畫像に示すように、メッセージの変更が表示されます。ジョークに適用される新しい日付が既存の日付と同じであるため、行が更新されなかったことを示します。

      WebでMySQLからのデータの表示:はじめに

      選択クエリは、多くのデータを取得できるため、少し異なって扱われます。PHPはその情報(bào)を処理する方法を提供します。

      [結(jié)果]セットの取り扱い

      ほとんどのSQLクエリでは、execメソッドは正常に機(jī)能します。クエリはデータベースに何かを行い、メソッドの返品値から影響を受ける行の數(shù)(ある場(chǎng)合)を取得します。ただし、選択クエリには、execより少しファンシーなものが必要です。選択したクエリがデータベースに保存されたデータを表示するために使用されることを思い出してください。データベースにのみ影響する代わりに、選択したクエリに結(jié)果があります。WebでMySQLからのデータの表示:はじめに>を返す方法が必要です。

      クエリメソッドは、データベースサーバーに送信される引數(shù)としてSQLクエリを受け入れるという點(diǎn)で、execのように見えます。ただし、返されるのはpdostatementオブジェクトです。これは、クエリから返されたすべての行(エントリ)のリストを含む結(jié)果セットを表します。

      クエリの処理でエラーが発生しなかった場(chǎng)合、このコードは結(jié)果セット(pdostatementオブジェクトの形で)を変數(shù)$ resultに保存します。この結(jié)果セットには、ジョークテーブルに保存されているすべてのジョークのテキストが含まれています。データベースのジョークの數(shù)に実際的な制限がないため、結(jié)果セットは非常に大きくなる可能性があります。

      第2章で、ループする必要があるが、何回かわからないときは、whileループは有用な制御構(gòu)造であると述べました。クエリが返されたレコードの數(shù)がわからないため、ループを使用することはできません。確かに、ここでは、ここで時(shí)間ループを使用して、結(jié)果セットの行を一度に1つずつ処理できます。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      whileループの條件は、おそらく慣れている條件とは異なるので、それがどのように機(jī)能するかを説明させてください。條件をすべてそれ自體で聲明として考えてください:

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      pdostatementオブジェクトのフェッチメソッドは、結(jié)果セットの次の行を配列として返します(第2章で配列について説明しました)。結(jié)果セットにこれ以上行がない場(chǎng)合、Fetchは代わりにFalseを返します。 (これは、PDOオブジェクトにできないことをするように依頼する1つのケースです。結(jié)果セットに行が殘っていない場(chǎng)合、フェッチは次の行を返すことができないためです。 。

      さて、上記のステートメントは$ row変數(shù)に値を割り當(dāng)てますが、同時(shí)に、ステートメント全體が同じ?jìng)帳蛞埭堡蓼?。これが、ステートメントをwhileループの條件として使用できる理由です。しばらくの間、ループは條件がfalseに評(píng)価されるまでループを続けます。このループは、結(jié)果セットに行があると同じくらい何度も発生し、ループが実行されるたびに$ rowが次の行の値を帯びます。把握するために殘されているのは、ループが実行されるたびに$ row変數(shù)から値を取得する方法です。 Fetchによって返された結(jié)果セットの行は連想配列として表され、結(jié)果セットのテーブル列にちなんで指定されたインデックスとともに表されます。 $ rowが結(jié)果セットの行である場(chǎng)合、$ row ['joketext']はその行のjoketext列の値です。 このコードでの目標(biāo)は、すべてのジョークのテキストを保存して、PHPテンプレートに表示できるようにすることです。これを行う最良の方法は、各ジョークを配列に新しいアイテムとして保存することです。 ジョークがデータベースから引き出された狀態(tài)で、PHPテンプレートjokes.html.php。

      に渡すことができます。 $ Jokes変數(shù)は、ジョークのリストを保存する配列です。 PHPで配列の內(nèi)容を書き出した場(chǎng)合、それは次のようになります:

      ただし、データは、コードで手動(dòng)で入力されるのではなく、データベースから取得されました。

      設(shè)定されている2つの異なる変數(shù)($ジョークと$エラー)があることに気付くでしょう。

      jokes.html.phpテンプレートでは、$ jokes配列の內(nèi)容または$エラー変數(shù)に含まれるエラーメッセージを表示する必要があります。

      変數(shù)に値が割り當(dāng)てられているかどうかを確認(rèn)するには、フォームが送信されたかどうかを確認(rèn)するために以前に使用したISSET関數(shù)を使用できます。テンプレートには、エラーを表示するかジョークのリストを表示するかを決定するIFステートメントを含めることができます。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      ここには新しいものは何もありませんが、ジョークを表示するには、$ jokesアレイの內(nèi)容を表示する必要があります。この時(shí)點(diǎn)まで使用した他の変數(shù)とは異なり、$ Jokesアレイには単一の値以上のものが含まれています。

      PHPで配列を処理する最も一般的な方法は、ループを使用することです。ループやループ用にすでに見てきました。 foreachループは、配列を処理するのに特に役立ちます:

      條件の代わりに、foreachループの上部にある括弧內(nèi)に配列が含まれ、次にキーワードが続き、次に配列の各アイテムを順番に保存するために使用される新しい変數(shù)の名前が含まれます。次に、ループの本體が配列內(nèi)の各アイテムに対して1回実行されます。そのアイテムが指定された変數(shù)に保存されるたびに、コードが直接アクセスできるようにします。
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      PHPテンプレートでForeachループを使用して、配列の各アイテムを順番に表示することが一般的です。これが私たちの$ JOKESアレイを探している方法です:

      ループコードとHTMLコードを説明するこのPHPコードのブレンドを使用すると、コードはかなり亂雑に見えます。このため、テンプレートで使用されている場(chǎng)合、foreachループを作成する代替方法を使用することが一般的です。

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      2つのコードは機(jī)能的に同一ですが、後者はHTMLコードと混合すると友好的に見えます。この形式のコードがテンプレートでどのように見えるかは次のとおりです。

      同じことをIFステートメントで行うことができ、ブレースを避けてHTMLテンプレート內(nèi)を見ることをお?jiǎng)幛幛筏蓼埂?
      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      
      これらの新しいツールを手元に置いて、ジョークのリストを表示するためにテンプレートを書くことができます。

      例:mysql-listjokes

      try {
        $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
          ’mypassword’);
        $output = 'Database connection established.';
      }
      catch (PDOException $e) {
        $output = 'Unable to connect to the database server.';
      }
      
      include  __DIR__ . '/../templates/output.html.php';
      

      $エラーテキストがページに表示されるか、各ジョークがブロック見積もり(

      )に含まれる段落(

      )に表示されます。ページ。

      try {
        $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
          'mypassword');
         $output = 'Database connection established.';
      }
      catch (PDOException $e) {
        $output = 'Unable to connect to the database server: ' . $e->getMessage();
      }
      
      include  __DIR__ . '/../templates/output.html.php';
      
      ジョークにはおそらくHTMLコード(、または&&&)として解釈できる文字が含まれている可能性があるため、HTMLSpecialCharsを使用してHTML文字エンティティ(つまり、&&lt;、&gtに変換される必要があります。 ;、および&&amp;)それで、それらが正しく表示されるように。

      次の畫像は、データベースにいくつかのジョークを追加したら、このページがどのように見えるかを示しています。

      <!doctype html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>Script Output</title>
        </head>
        <body>
            <?php echo $output; ?>
        </body>
      </html>
      

      コントローラーでwhileループを使用して、一度に1つずつセットから行を削除する方法を覚えていますか?
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      pdostatementオブジェクトは、foreachループに渡すと、配列のように動(dòng)作するように設(shè)計(jì)されていることがわかります。したがって、しばらくの間ではなく、Foreachループを使用してデータベース処理コードをわずかに簡(jiǎn)素化できます。

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      この本の殘りの部分では、このTidier Foreachの形を使用します。

      別のきちんとしたツールPHPが提供するのは、Echoコマンドを呼び出す速記の方法です。これは、すでに見たように、頻繁に使用する必要があります。私たちのエコーステートメントは次のようになります: 代わりに、

      これを使用できます:

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      これはまったく同じことをします。 速記を使用した更新されたテンプレートを次に示します。
      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      
      例:mysql-listjokes-shorthand

      この時(shí)點(diǎn)から適用可能な速記表記を使用します。

      注:5.4以前のPHPのバージョンでは、この速記の表記法にはかなり珍しいPHP設(shè)定を有効にする必要があるため、互換性の理由で落膽しました。速記の表記法を使用した場(chǎng)合、コードが有効になっていないサーバーに移動(dòng)したときに動(dòng)作を停止した可能性があります。
      try {
        $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
          ’mypassword’);
        $output = 'Database connection established.';
      }
      catch (PDOException $e) {
        $output = 'Unable to connect to the database server.';
      }
      
      include  __DIR__ . '/../templates/output.html.php';
      

      PHP 5.4(最近現(xiàn)実的に遭遇するバージョン)の時(shí)點(diǎn)で、速記はPHP設(shè)定に関係なく機(jī)能するため、すべてのサーバーで動(dòng)作しないことを心配せずに安全に使用できます。

      先に考える

      見た例では、ページを表示するために必要なすべてのHTMLが含まれるテンプレートjokes.html.phpを作成しました。ただし、當(dāng)社のウェブサイトが成長(zhǎng)するにつれて、さらにページを追加します。人々がウェブサイトにジョークを追加できるようにするページが必要です。また、入門テキストを備えたホームページ、所有者の連絡(luò)先の詳細(xì)を備えたページ、そしてサイトが成長(zhǎng)するにつれて、おそらくさえ、ホームページも必要です。人々がウェブサイトにログインできるページ。

      ここではかなり前に飛び込んでいますが、プロジェクトがどのように成長(zhǎng)するかを常に検討する価値があります。 jokes.html.phpに使用したばかりのアプローチを適用した場(chǎng)合、殘りのテンプレートにaddjoke.html.php、home.html.php、contact.html.php、login.html.phpなど - 私たちllは、繰り返されるコードがたくさんあります。 ウェブサイト上のすべてのページには、このようなものになるテンプレートが必要です。

      プログラマーとして、繰り返しコードはあなたができる最悪のことの1つです。実際、プログラマーはしばしば「自分自身を繰り返さないでください」を表す乾燥原理を指します。コードのセクションを繰り返していることに気付いた場(chǎng)合、ほぼ間違いなくより良い解決策があります。

      最高のプログラマーはすべて怠zyであり、コードを繰り返すことは作業(yè)を繰り返すことを意味します。テンプレートにこのコピー/貼り付けアプローチを使用すると、Webサイトの維持が非常に困難になります。各ページに表示したいフッターとナビゲーションセクションがあると想像しましょう。私たちのテンプレートは、次のようになります:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      2022年に問題に遭遇します! Webサイト上のすべてのページのテンプレート - たとえば、jokes.html.php addjoke.html.php、home.html.php、contact.html.php andlogin.html.php - 上記の構(gòu)造にコードを含める場(chǎng)合「2022」の著作権通知で年を更新すると、各テンプレートを開き、日付を変更する必要があります。 この問題を回避するために、私たちは賢く、サーバーのクロック(エコー日付( 'y');)から動(dòng)的に読み取ることができますが、<script>タグを追加したい場(chǎng)合はどうなりますかそれはすべてのページに含まれていましたか?または、メニューに新しいリンクを追加しますか?すべてのテンプレートファイルを開いて変更する必要があります! </script>

      5つまたは6つのテンプレートを変更するのは少し迷惑な場(chǎng)合がありますが、それほど問題は発生しません。しかし、ウェブサイトが數(shù)十または數(shù)百ページに成長(zhǎng)した場(chǎng)合はどうなりますか?メニューにリンクを追加するたびに、すべてのテンプレートを開いて変更する必要があります。

      この問題

      一連のインクルードステートメントで解決できます。たとえば、

      しかし、この方法には透視が必要です。將來行うために必要な変更を正確に予測(cè)する必要があり、関連性を使用する必要があります。 上記の例では、たとえば、nav.html.phpにそれらを追加することで新しいメニューエントリを簡(jiǎn)単に追加できますが、すべてのページに<script>タグを追加するか、CSSクラスを追加するのと同じくらい些細(xì)なことですNAV要素は、変更を行うためにすべてのテンプレートを開くことを意味します。 </script>ウェブサイトの生涯にわたって必要なすべての変更を正確に予測(cè)する方法はないため、この章の冒頭で示したアプローチは実際には優(yōu)れています。

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      このテンプレートを常にLayout.html.phpを呼び出す場(chǎng)合、$ output変數(shù)をいくつかの

      htmlコード

      に設(shè)定し、ナビゲーションとページに表示してください。フッター。これの利點(diǎn)は、Webサイトのすべてのページの日付を変更するには、1つの場(chǎng)所で変更するだけでいいということです。 また、各コントローラーがタグの間に表示される値(サンプルコードでjokes.cssとして使用できる)とともにとタグの間に表示される値を定義できるように、$タイトル変數(shù)にも忍び込みました。ページは少しきれいです。

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      コントローラーを使用できるようになりました。 '/../templates/layout.html.php'; $ outputと$ titleの値を提供します

      rayout.html.phpを使用したjokes.phpは、以下に示すようにコード化されています

      例:mysql-listjokes-layout-1

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      しかし、待ってください! Tryブロックの$ outputで何が起こっていますか? $ output変數(shù)には、実際にはHTMLコードが含まれています。ループは、ジョークリストのHTMLコードを含む文字列を構(gòu)築します。

      原則として、これが私たちが起こりたいことです。$ output変數(shù)には、ナビゲーションとフッターの間にレイアウトの間に挿入されるHTMLコードが含まれています。信じられないほど醜い。

      既に、includeステートメントを介してHTMLとPHPコードの混合を避ける方法を示しました。先ほど行ったように、ジョークを獨(dú)自のファイルに表示するためにHTMLを移動(dòng)するのは良いことですが、今回は、ジョークリストページに固有のHTMLコードのみです。

      Jokes.html.php Templatesディレクトリには、このコードが含まれている必要があります

      重要なことに、これはジョークを表示するためのコードのみです。ナビゲーション、フッター、

      タグなど、すべてのページで繰り返されるものは含まれていません。ジョークリストページに固有のHTMLコードのみです。 このテンプレートを使用するには、以下を試すことができます
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      またはあなたが非常に賢い場(chǎng)合:

      このアプローチを使用すると、ロジックは完全に健全になります。 jokes.html.phpを含める必要があります。殘念ながら、includeステートメントは、呼び出されたポイントで含まれるファイルからコードを?qū)g行するだけです。上記のコードを?qū)g行すると、出力は実際には次のようなものになります:

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      jokes.html.phpが最初に含まれるため、最初にブラウザに送信されます。私たちがする必要があるのはLoad jokes.html.phpですが、出力をブラウザに直接送信する代わりに、それをキャプチャして$ output変數(shù)に保存する必要があります。 。

      includeステートメントは値を返しないため、$ output = include 'jokes.html.php';望ましい効果はありません。PHPには、それを行うための代替聲明がありません。しかし、それはそれが不可能であるという意味ではありません。
      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      

      PHPには、「出力バッファリング」と呼ばれる便利な機(jī)能があります。複雑に聞こえるかもしれませんが、コンセプトは実際には非常にシンプルです。エコーを使用して何かを印刷する場(chǎng)合、またはHTMLを含むファイルを含める場(chǎng)合、通常はブラウザに直接送信されます。出力バッファリングを使用することにより、出力をブラウザに直接送信する代わりに、HTMLコードは「バッファ」でサーバーに保存されます。これは、基本的にこれまでに印刷されているすべてを含む文字列です。 さらに良いことに、PHPを使用すると、バッファーをオンにしてその內(nèi)容をいつでも読み取ることができます。

      必要な2つの関數(shù)があります
      • ob_start()、出力バッファを開始します。この関數(shù)を呼び出した後、echoまたはhtmlを介して印刷されたものはすべて、ブラウザに送信されるのではなく、バッファーに保存されます。
      • ob_get_clean()は、バッファの內(nèi)容を返してクリアします。
      おそらく推測(cè)したように、関數(shù)名の「OB」は「出力バッファー」の略です。

      含まれているファイルの內(nèi)容をキャプチャするには、これら2つの機(jī)能を利用する必要があります。

      このコードが実行されると、$ output変數(shù)には、jokes.html.phpテンプレートで生成されたHTMLが含まれます。

      これからこのアプローチを使用します。各ページは、2つのテンプレートで構(gòu)成されています:
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      layout.html.phpには、すべてのページで必要なすべての一般的なHTMLが含まれています

      その特定のページに固有のHTMLコードのみを含む一意のテンプレート
      • 完全なjokes.phpは次のようになります:
      index.phpファイルを追加して、「ホーム」リンクを機(jī)能させてみましょう。このページに何でも入れることができます:最新のジョーク、今月の最高の冗談、または私たちが好きなものは何でも。ただし、今のところ、シンプルに保ち、「インターネットジョークデータベースへようこそ」というメッセージがあります。

      TemplatesフォルダーでHome.html.phpというファイルを作成します:

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      

      index.phpはjokes.html.phpよりもかなり簡(jiǎn)単です。データベースから情報(bào)が取得されないため、データベース接続は必要ありませんし、試してみる必要はありません。 。

      例:mysql-listjokes-layout-3

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      

      注:必要に応じてデータベースにのみ接続することをお?jiǎng)幛幛筏蓼?。データベースは多くのWebサイトで最も一般的なパフォーマンスボトルネックであるため、できるだけ少ない接続を作成することが望ましいです。

      両方のページがブラウザで動(dòng)作することをテストします。 https://v.je/jokes.phpにアクセスすると、ジョークのリストが表示され、https://v.je/jokes.phpにようこそメッセージが必要です。両方のページには、ナビゲーションとフッターが含まれている必要があります

      レイアウトを修正してみてください。html.php。あなたが行う変更は両方のページに表示されます。サイトに數(shù)十ページがあった場(chǎng)合、レイアウトの変更はすべてのページに影響します。 データをデータベースに挿入する
      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      
      このセクションでは、サイト訪問者がデータベースに自分のジョークを追加できるようにするために、ツールを自由に使用する方法を示します。

      サイトの訪問者に新しいジョークを入力させたい場(chǎng)合は、明らかにフォームが必要になります。これが請(qǐng)求書に適合するフォームのテンプレートです:

      Templates DirectoryのAddJoke.html.phpとしてこれを保存します。

      要素の最も重要な部分は、アクション屬性です。アクション屬性は、フォームが送信されたら、データを送信する場(chǎng)所をブラウザに伝えます。これは、「addjoke.php」などのファイルの名前である可能性があります。ただし、

      屬性を「 "に設(shè)定して空にしたままにしておくと、ユーザーが提供するデータが現(xiàn)在表示されているページに送り返されます。ブラウザのURLにPageがAddjoke.phpとして表示されている場(chǎng)合、ユーザーが追加ボタンを押すとデータが送信されます。

      このフォームを前の例に結(jié)び付けましょう。これにより、データベースにジョークのリストが表示されました。 layout.html.phpを開き、addjoke.phpに行く「新しいジョークを追加」リンクにURLを追加します:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      layout.html.phpを開いている間、上記のように第2章のform.css styleSheetを含めます。これで、レイアウト內(nèi)に表示される任意のフォームには、以前に使用したスタイルがあります。 このフォームが送信されると、リクエストには、テキスト領(lǐng)域に入力されたジョークのテキストを含む変數(shù)(joketext)が含まれます。この変數(shù)は、PHPによって作成された$ _POSTアレイに表示されます。

      パブリックディレクトリにaddjoke.phpを作成しましょう。このコントローラーの基本的なロジックは次のとおりです

      Joketext Post変數(shù)が設(shè)定されていない場(chǎng)合は、フォームを表示します。 それ以外の場(chǎng)合は、提供されたジョークをデータベースに挿入します。

      このskeleton addjoke.php:
        を作成します
      • このオープニングステートメントが$ _POSTアレイにJoketextという変數(shù)が含まれているかどうかを確認(rèn)します。設(shè)定されている場(chǎng)合、フォームが提出されています。それ以外の場(chǎng)合、addjoke.html.phpのフォームは、ブラウザに表示するために$ output変數(shù)にロードされます。 この時(shí)點(diǎn)でブラウザでaddjoke.phpを開いている場(chǎng)合、フォームが表示されますが、冗談を入力して追加することは機(jī)能しません。 $ _POST ['JOKETEXT']。
      • 提出されたジョークをデータベースに挿入するには、$ _POST ['joketext']に保存されている値を使用して挿入クエリを?qū)g行して、ジョークテーブルのジョークテキスト列に記入する必要があります。これにより、このようなコードを書くことにつながる可能性があります:
      ただし、このコードには深刻な問題があります。$ _POST ['JOKETEXT']の內(nèi)容は、フォームを提出したユーザーの制御下にあります。悪意のあるユーザーが厄介なSQLコードをフォームに入力した場(chǎng)合、このスクリプトは疑いなくMySQLサーバーに送ります。このタイプの攻撃はSQLインジェクション攻撃と呼ばれ、PHPの初期には、ハッカーがPHPベースのWebサイトで見つけて悪用した最も一般的なセキュリティホールの1つでした。 (多くのプログラミングニッチでは、開発者が期待していないため、SQLインジェクション攻撃は驚くほど効果的です。トラフィックカメラにデータベースをドロップさせるこの顕著な試みを考慮してください。 ??>

      ユーザーはこれをテキストボックスに入力する場(chǎng)合があります:

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      

      データベースに送信されたクエリは次のとおりです。

      しかし、ユーザーが以下に入力した場(chǎng)合はどうなりますか:

      この場(chǎng)合、データベースに送信されたクエリは次のとおりです。
      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      ジョークには引用文字が含まれているため、MySQLはエラーを返します?!窯et」の前に引用が表示される前に、文字列の終わりとして表示されます。 これを有効なクエリにするには、データベースに送信されたクエリが次のようになるように、テキスト內(nèi)のすべての引用符を逃れる必要があります。

      見積もりが含まれている場(chǎng)合、

      データが挿入されていません。ユーザーにとっては迷惑な問題です。タイプしたものは何でも失うでしょう。しかし、悪意のあるユーザーはこれを悪用することができます。 PHPの古いバージョンでは、セミコロン(;)。

      ユーザーがこれをボックスに入力した場(chǎng)合を想像してみてください:
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      

      これにより、次のクエリがデータベースに送信されます

      -MySQLの単一行のコメントなので、最後の行は無視され、挿入クエリが実行され、その後、ユーザーがボックスに入力した削除クエリが続きます。実際、ユーザーはボックスに気に入った任意のクエリを入力でき、データベースで実行されます!
      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      

      魔法の引用

      PHPの初期の頃、SQL注入攻撃は非常に恐れられていたため、PHPの背後にあるチームが言語(yǔ)にSQL注入に対する組み込みの保護(hù)を追加しました。まず、複數(shù)のクエリを一度に送信する機(jī)能を無効にしました。第二に、彼らは魔法の引用と呼ばれるものを追加しました。 PHPのこの保護(hù)機(jī)能は、ブラウザによって送信されたすべての値を自動(dòng)的に分析し、アポストロフィのような「危険な」文字の前にbackSlashes()を挿入しました。
      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      
      魔法の引用機(jī)能の問題は、それが防止されただけ多くの問題を引き起こしたことです。まず第一に、検出したキャラクターと、それらを消毒するために使用した方法(バックスラッシュでそれらを接頭する)は、狀況によっては有効でした。サイトの文字エンコードと使用していたデータベースサーバーに応じて、これらの測(cè)定値は完全に効果がない可能性があります。 2番目に、提出された値がSQLクエリを作成するよりも、他の

      の目的で使用された場(chǎng)合、それらのバックスラッシュは本當(dāng)に面倒です。魔法の引用機(jī)能は、アポストロフィが含まれている場(chǎng)合、ユーザーの姓に偽のバックスラッシュを挿入します。 要するに、Magic Quotesの機(jī)能は悪い考えでした。バージョン5.4からPHPから削除されたためです。ただし、PHPの年齢とそこにあるコードの量により、それについてのいくつかの言及に出くわすかもしれないので、魔法の引用機(jī)能が何をすべきかを基本的に理解する価値があります。

      魔法の引用が悪い考えとして特定されたら、PHP開発者からのアドバイスはそれをオフにすることでした。しかし、これは、いくつかのWebサーバーがオフになり、他のWebサーバーがオンになっていることを意味していました。これは開発者にとって頭痛の種でした。彼らは、コードを使用してそれをオフにするためにこれまでにそれをオフにすることを指示する必要がありました - これは一部の共有サーバーでは不可能でした - またはそれを説明するために追加のコードを書きます。

      ほとんどの開発者は後者を選びました、そして、あなたは次のようないくつかのコードに出くわすかもしれません:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      このようなレガシーコードでこのようなステートメントが表示された場(chǎng)合、IFステートメント內(nèi)のコードは最近のPHPバージョンで実行されないため、ブロック全體を安全に削除できます。

      このようなコードが表示されている場(chǎng)合、元の開発者が魔法の引用の問題を理解し、それを防ぐために最善を盡くしていたことを意味します。 PHP 5.4(これは、サポートされていないため、決して出くわすべきではありません)の時(shí)點(diǎn)で、get_magic_quotes_gpc()は常にfalseを返し、コードは実行されません。

      魔法の引用について本當(dāng)に知る必要があるのは、それが手元の問題に対する悪い解決策だったということだけです。もちろん、魔法の引用がなければ、問題の別の解決策を見つける必要があります。幸いなことに、PDOクラスは、「準(zhǔn)備されたステートメント」と呼ばれるものを使用して、すべてのハードワークを行うことができます。

      作成されたステートメント

      準(zhǔn)備されたステートメントは、事前にデータベースサーバーに送信した特別な種類のSQLクエリであり、サーバーに実行のために準(zhǔn)備する機(jī)會(huì)を與えますが、実際には実行しません。 .phpスクリプトを書くようなものだと考えてください。コードはそこにありますが、実際にはWebブラウザのページにアクセスするまで実行されません。準(zhǔn)備されたステートメントのSQLコードには、クエリが実行されるクエリ

      の場(chǎng)合に値を提供するプレースホルダーを含めることができます。これらのプレースホルダーを埋めるとき、PDOは「危険な」キャラクターを自動(dòng)的に守るのに十分賢いです。

      挿入クエリを準(zhǔn)備してから、ジョークのテキストとして$ _POST ['joketext']で安全に実行する方法を次に示します。

      これを分解しましょう。一度に1つのステートメントです。まず、SQLクエリをPHP文字列として記述し、通常どおり変數(shù)($ sql)に保存します。ただし、この挿入クエリで珍しいのは、Joketext列に値が指定されていないことです。代わりに、この値のプレースホルダーが含まれています(:joketext)。今、冗談のフィールドについて心配しないでください。すぐに丸みを帯びます。

      次に、PDOオブジェクトの準(zhǔn)備方法($ PDO)を呼び出し、SQLクエリを引數(shù)として渡します。これにより、クエリがMySQLサーバーに送信され、クエリを?qū)g行するように

      を準(zhǔn)備するように依頼します。 Joketext列に値がないため、MySQLはまだ実行できません。準(zhǔn)備メソッドは、pdostatementオブジェクト(はい、選択したクエリの結(jié)果を與えるのと同じ種類のオブジェクト)を返します。

      MySQLが実行のためのステートメントを作成したので、pdostatementオブジェクト($ stmt)のbindvalueメソッドを呼び出すことにより、欠損値を送信できます。このメソッドを1回提供します(この場(chǎng)合、1つの値(ジョークテキスト)を提供する必要があります)。 ($ _POST ['JOKETEXT'])で記入したい。 MySQLは、解析する必要があるSQLコードではなく、個(gè)別の値を送信していることを知っているため、値の文字がSQLコードとして解釈されるリスクはありません。準(zhǔn)備されたステートメントを使用する場(chǎng)合、SQLインジェクションの脆弱性は不可能です!

      最後に、pdostatementオブジェクトの実行方法を呼び出して、mysqlに提供した値でクエリを?qū)g行するように指示します。 (はい、このpdostatementメソッドは、execと呼ばれるPDOオブジェクトの同様の方法とは異なり、executeと呼ばれます。PHPには多くの強(qiáng)みがありますが、一貫性はそれらの1つではありません?。?

      このコードについて気付く興味深いことの1つは、ジョークテキストの周りに引用符を配置したことがないということです。 :joketextは引用符なしでクエリの內(nèi)部に存在し、bindvalueを呼び出したとき、$ _postアレイからプレーンジョークテキストを渡しました。準(zhǔn)備されたステートメントを使用する場(chǎng)合、データベース(この場(chǎng)合はMySQL)がテキストが文字列であり、クエリが実行されたときにそのように扱われるほど賢いため、引用符は必要ありません。 このコードの長(zhǎng)引く質(zhì)問は、今日の日付を冗談型フィールドに割り當(dāng)てる方法です。私たちは、mysqlが必要とするyyyy-mm-dd形式で今日の日付を生成するために、いくつかの派手なphpコードを書くことができましたが、mysql自體にこれを行う機(jī)能があることがわかりました - curdate:

      >

      MySQL Curdate関數(shù)は、Jokedate列の値として現(xiàn)在の日付を割り當(dāng)てるために使用されます。 MySQLには実際にはこれらの機(jī)能が數(shù)十がありますが、必要に応じてのみ紹介します。 クエリができたので、「ジョークを追加」フォームの送信を処理するために以前に開始したIFステートメントを完了することができます。

      しかし、待ってください!このIFステートメントには、もう1つのトリックがあります。以前のようにPHPテンプレートを表示する代わりに、新しいジョークをデータベースに追加したら、ユーザーのブラウザをジョークのリストにリダイレクトします。そうすれば、ユーザーは新しく追加されたジョークを見ることができます。それが、上記のIFステートメントの最後にある2行がそうすることです。

      望ましい結(jié)果を達(dá)成するために、最初の本能は、新しいジョークを追加してjokes.html.phpテンプレートを使用してリストを表示した後、コントローラーがデータベースからジョークのリストを単純に取得できるようにすることです。これを行うことの問題は、ブラウザの観點(diǎn)からジョークのリストが「ジョークを追加」フォームを提出した結(jié)果であることです。ユーザーがページを更新する場(chǎng)合、ブラウザはそのフォームを再送信し、新しいジョークの別のコピーがデータベースに追加されます!これはめったに望ましい動(dòng)作ではありません。

      代わりに、ブラウザに、ジョークの更新されたリストを、フォームを再送信せずにリロードできる通常のWebページとして扱うことを望んでいます。これを行う方法は、HTTPリダイレクトを使用してブラウザのフォームの送信に回答することです。これは、ブラウザに別のページに移動(dòng)するように指示する特別な応答です。 (HTTPはHyperText Transfer Protocolの略であり、VisitorのWebブラウザーとWebサーバーの間で交換されるリクエスト/応答通信を説明する言語(yǔ)です。)

      PHPヘッダー関數(shù)は、ブラウザに送信された応答に特定のヘッダーを挿入できるようにすることにより、このような特別なサーバー応答を送信する手段を提供します。リダイレクトを信號(hào)にするには、ブラウザを次のように指示するページのURLでロケーションヘッダーを送信する必要があります。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      この場(chǎng)合、jokes.phpにブラウザを送信したいと考えています。データベースに新しいジョークを追加した後、ブラウザをコントローラーにリダイレクトする2つの行です。

      以下は、addjoke.phpコントローラーの完全なコードです

      例:mysql-addjoke
      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      

      これを確認(rèn)するためにこれを確認(rèn)して、すべてが理にかなっていることを確認(rèn)すると、データベースクエリを?qū)g行するコードのいずれかの前に新しいPDOオブジェクトを作成してデータベースに接続するコードが來る必要があることに注意してください。ただし、「ジョークの追加」フォームを表示するには、データベース接続は必要ありません。接続は、フォームが提出されたときにのみ行われます。

      これをロードして、ブラウザを介して新しいジョークをデータベースに1つまたは2つ追加します。 あなたはそれを持っています:あなたは既存のジョークを見ることができます - そしてあなたのmysqlデータベースに新しいジョークを追加します。

      データベースからデータを削除します

      このセクションでは、ジョークデータベースサイトを最後に強(qiáng)化します。 Jokesページ(jokes.php)の各ジョークの橫に、削除ラベルの付いたボタンを配置します。クリックすると、データベースからそのジョークを削除し、更新されたジョークリストを表示します。
      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      挑戦が好きなら、私の解決策を見るために読む前に、自分でこの機(jī)能を書くのを刺したいかもしれません。ブランドの新しい機(jī)能を?qū)g裝していますが、主にこの章の前の例で採(cǎi)用したものと同じツールを使用します。ここにあなたを始めるためのいくつかのヒントがあります:

      • 新しいコントローラー(deletejoke.php)が必要です。
      • SQL Deleteコマンドが必要になります。これを第3章で紹介しました。
      • コントローラーで特定のジョークを削除するには、ユニークに識(shí)別する必要があります。ジョークテーブルのID列は、この目的を果たすために作成されました。ジョークを削除するリクエストで削除するには、ジョークのIDを渡す必要があります。これを行う最も簡(jiǎn)単な方法は、隠されたフォームフィールドを使用することです。
      • 少なくとも、これにどのようにアプローチするかを考えるには、少し時(shí)間がかかります。解決策を見る準(zhǔn)備ができたら、読んでください!

      最初に、データベースからジョークのリストを取得する選択クエリを変更する必要があります。 JokeText列に加えて、各ジョークをユニークに識(shí)別できるようにID列を取得する必要があります。

      また、データベースの結(jié)果を保存するwhileループを$ jokesアレイに変更するwhileループを変更する必要があります。各ジョークのテキストを配列にアイテムとして単に保存する代わりに、各ジョークのIDとテキストの両方を保存します。これを行う1つの方法は、$ jokes配列內(nèi)の各アイテムをそれ自體の配列にすることです。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      注:既にforeachループを使用してデータベースの結(jié)果行を処理することに切り替えている場(chǎng)合、それも正常に機(jī)能します:

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      このループがコースを?qū)g行すると、$ JOKESアレイがあります。各アイテムは、ジョークのIDとそのテキストの2つのアイテムを持つ連想配列です。ジョーク($ jokes [n])ごとに、ID($ jokes [n] ['id'])とそのテキスト($ jokes [n] ['text'])を取得できます。

      次のステップは、jokes.html.phpテンプレートを更新して、この新しい配列構(gòu)造から各ジョークのテキストを取得し、各ジョークの削除ボタンを提供することです。 この更新されたコードのハイライトは次のとおりです

      • 各ジョークはフォームで表示され、提出された場(chǎng)合、そのジョークを削除します。フォームのアクション屬性を使用して、これを新しいコントローラーdeletejoke.phpに信號(hào)します。
      • $ jokesアレイの各ジョークは、単純な文字列の代わりに2項(xiàng)目アレイで表されるため、ジョークのテキストを取得するためにこの行を更新する必要があります。これは、$ joke ['text]の代わりに$ joke [' text ']を使用して行います
      • このジョークを削除するためにフォームを送信すると、削除されるジョークのIDに沿って送信します。これを行うには、ジョークのIDを含むフォームフィールドが必要ですが、このフィールドをユーザーから隠しておくことをお?jiǎng)幛幛筏蓼?。そのため、非表示のフォームフィールド(入力型= "非表示")を使用します。このフィールドの名前はIDであり、その値は削除されるジョークのIDです($ joke ['id'])。ジョークのテキストとは異なり、IDはユーザーがサビザの値ではないので、 htmlspecialcharsを使用してHTML-Safeにすることを心配する必要があります。ジョークがデータベースに追加されたときにID列のMySQLによって自動(dòng)的に生成されるため、それが數(shù)になることを確信できます。
      • 送信ボタン(入力タイプ= "送信")は、クリック時(shí)にフォームを提出します。その値屬性は、削除のラベルを提供します。
      • 最後に、このジョークのフォームを閉じます。
      • 注:HTMLを知っている場(chǎng)合、引用されたテキスト(ジョーク)の一部ではないため、フォームと入力タグがブロッククロート要素の外側(cè)に屬すると考えているでしょう。

      厳密に言えば、それは本當(dāng)です。フォームとその入力は、実際にはブロッククオートの前または後のいずれかでなければなりません。殘念ながら、そのタグ構(gòu)造を表示するには、この本の範(fàn)囲を超えた小さなCSS(カスケードスタイルのシート)コードが明確に必要です。

      PHPとMySQLに関する本の中でCSSレイアウトテクニックを教えるのではなく、この不完全なマークアップを使用することにしました。このコードを現(xiàn)実の世界で使用する場(chǎng)合は、CSSの學(xué)習(xí)に時(shí)間を費(fèi)やす必要があります(または、少なくともCSSの第一人者のサービスを保護(hù)します)。そうすれば、CSSが見栄えを良くするために必要なCSSを心配することなく、HTMLマークアップを完全に制御できます。 CSSレイアウトについて詳しく知りたい場(chǎng)合は、CSS Master、第3版

      、Tiffany Brownをご覧ください。 次のCSSをJokes.cssに追加して、ボタンをジョークの右側(cè)に表示し、それらの間に線を引くようにします。

      次の畫像は、削除ボタンが追加された冗談リストがどのように見えるかを示しています。

      しかし、待ってください!削除ボタンの動(dòng)作に進(jìn)む前に、一時(shí)的に一歩下がって、この行を注意深く見てみましょう。

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      
      ここでは、pdostatementオブジェクトをループしています。これにより、キーIDとjoketextが対応する値を含む$ row変數(shù)が提供されます。それを使用して、同じキーと値を持つ別の配列を構(gòu)築します。 ??>

      これがひどく非効率的であることにすでに気付いたかもしれません。このコードを使用して同じことを達(dá)成できました:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      しかし、私たちが知っているように、これはforeachループでも達(dá)成できます:

      new PDO('mysql:host=hostname;dbname=database', 'username',
        'password')
      
      この例では、データベースのレコードを反復(fù)し、配列を構(gòu)築するためにForeachを使用しています。次に、テンプレート內(nèi)の別のforeachループを使用して、配列をループします。これを書くことができます:

      $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
        'mypassword');
      
      今、$ジョークがテンプレートで反復(fù)されると、それは配列ではなく、pdostatementオブジェクトです。ただし、それは出力に影響を與えず、コードを節(jié)約します。実際、$ result変數(shù)を完全に省略し、pdostatementオブジェクトを$ jokes変數(shù)に直接読み込むことができます。完全なjokes.phpコントローラーは、次のようになりました:

      try {
        ? do something risky
      }
      catch (ExceptionType $e) {
        ? handle the exception
      }
      
      コントローラーのレコードを繰り返しすることさえありませんが、テンプレート內(nèi)のレコードを直接反復(fù)し、コードを保存し、ページをわずかに速く実行するだけです。一度記録。

      新しい削除ボタンに戻る:この新機(jī)能を機(jī)能させるために殘っているのは、関連するdeletejoke.phpを追加してデータベースに削除クエリを発行することだけです。

      更新されたjokes.phpおよびdeletejoke.phpの完全なコードは、例として入手可能です。MySQL-DeleteJoke。
      try {
        $pdo = new PDO('mysql:host=mysql;dbname=ijdb', 'ijdbuser',
          ’mypassword’);
        $output = 'Database connection established.';
      }
      catch (PDOException $e) {
        $output = 'Unable to connect to the database server.';
      }
      
      include  __DIR__ . '/../templates/output.html.php';
      
      このコードのチャンクは、章の前半で「ジョークを追加」コードを処理するために追加したコードとまったく同じように機(jī)能します。削除するジョークIDのプレースホルダーで削除クエリを準(zhǔn)備することから始めます。

      ヒント:ジョークIDはユーザーに見えない隠されたフォームフィールドによって提供されるため、この場(chǎng)合、データベースをSQLインジェクション攻撃から保護(hù)するために準(zhǔn)備されたステートメントは不要だと思うかもしれません。実際、すべてのフォームフィールド(隠されたフィールドでも)は、最終的にユーザーの制御下にあります。たとえば、広く配布されているブラウザアドオンがあります。たとえば、非表示のフォームフィールドを表示し、ユーザーが編集できるようになります。覚えておいてください:ブラウザから提出された価値は、サイトのセキュリティを保護(hù)することに関して最終的に疑わしいです。

      その後、提出された値の$ _POST ['ID']をそのプレースホルダーにバインドし、クエリを?qū)g行します。そのクエリが達(dá)成されたら、PHPヘッダー関數(shù)を使用して、ブラウザに新しいリクエストを送信して、ジョークの更新リストを表示するように依頼します。

      注:自分でこの例に取り組んだ場(chǎng)合、ジョークごとに削除ボタンを含むhtmlフォーム全體を書くのではなく、ジョークごとに削除ハイパーリンクを提供することで、最初の本能は、あなたの最初の本能があったかもしれません。ページ。確かに、このようなリンクのコードははるかに簡(jiǎn)単になります:

      CREATE USER 'ijdbuser'@'%' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON `ijdb`.* TO 'ijdbuser'@'%';
      

      要するに、ハイパーリンクを使用してアクションを?qū)g行してはいけません(ジョークの削除など)。それらは、いくつかの関連コンテンツへのリンクを提供するためにのみ使用する必要があります。 Method = "Get"のフォームにも同じことが言えます。これは、既存のデータのクエリを?qū)g行するためにのみ使用する必要があります。アクションは、method = "post"が送信されるフォームの結(jié)果としてのみ実行する必要があります。

      この理由は、method = "post"を使用してフォームがブラウザーと関連ソフトウェアによって異なって扱われることです。 method = "post"を使用してフォームを送信してから、ブラウザの更新ボタンをクリックする場(chǎng)合、たとえば、ブラウザはフォームを再提出することを確認(rèn)するかどうかを?qū)い亭蓼?。ブラウザは、methods = "get"を使用してリンクやフォームに関して再提出に対して同様の保護(hù)を持っていません。

      検索エンジンやその他のWebクローラーも、サイトのすべてのリンクをフォローして、検索結(jié)果にサイトのページを表示するタイミングを作成するために、

      ハイパーリンクの結(jié)果としてサイトが冗談を削除した場(chǎng)合、検索エンジンがサイトを見つけるたびにジョークが削除されるのを見つけることができます。 ミッションが達(dá)成されました

      この章では、オブジェクトを作成して呼び出してMySQLデータベースサーバーとインターフェイスすることができる內(nèi)蔵PHPクラス(PDO、PDOEXCEPTION、およびPDOSTATEMENT)のコレクションであるPHPデータオブジェクト(PDO)についてすべてを?qū)Wびました。彼らが提供する方法。あなたがそれに參加している間、あなたはまた、オブジェクト指向プログラミング(OOP)の基本を取り上げました。これはPHP初心者にとっては決して偉業(yè)ではありません!

      PDOオブジェクトを使用して、IJDBデータベースをオンラインで公開し、訪問者がジョークを追加および削除できるようにする最初のデータベース駆動(dòng)型Webサイトを作成しました。 ある意味では、この章がこの本の記載されている使命を達(dá)成したと言えます。データベース駆動(dòng)型のWebサイトを構(gòu)築する方法を教えてください。もちろん、この章の例には、裸の必需品のみが含まれていました。本の殘りの部分では、この章で構(gòu)築することを?qū)Wんだスケルトンを肉付けする方法を紹介します。 第5章では、MySQLワークベンチのSQLクエリウィンドウに戻ります。リレーショナルデータベースの原則と高度なSQLクエリを使用して、より複雑なタイプの情報(bào)を表現(xiàn)する方法を?qū)Wび、訪問者が追加するジョークに対してクレジットを提供します!

      php&mysql:初心者から忍者、第7版

      からこの抜粋を楽しんだことを願(yuàn)っています。完全な本は、SitePoint Premiumで、お?dú)荬巳毪辘伪兢潆娮訒涡訕I(yè)者から入手できます。

      Web上にMySQLからのデータの表示に関するFAQ

      Webブラウザーを使用してMySQLデータベースに接続するにはどうすればよいですか?

      Webブラウザーを使用してMySQLデータベースに接続するには、PHPMyAdminなどのWebベースのインターフェイスが必要です。 PhpMyAdminは、Web上でMySQLの管理を処理することを目的としたPHPで書かれたフリーソフトウェアツールです。使用するには、サーバーにインストールしてから、サーバーのIPアドレスを入力して「/phpmyAdmin」を入力して、Webブラウザーからアクセスする必要があります。 MySQL資格情報(bào)を入力するように求められ、認(rèn)証されると、ブラウザからデータベースを直接管理できます。 ??> MySQL Shellは、MySQLの高度なクライアントおよびコードエディターです。 JavaScriptとPythonにスクリプト機(jī)能を提供し、MySQLを使用するためのAPIが含まれています。それを使用して、データクエリと更新、およびさまざまな管理操作を?qū)g行できます。 MySQLシェルはローカルマシンにインストールできます。適切な資格情報(bào)を使用してMySQLサーバーに接続できます。あなたのウェブサイト上のMySQLデータ。これは通常、PHPのようなサーバー側(cè)のスクリプト言語(yǔ)で行われます。 PHPスクリプトは、MySQLデータベースに接続し、クエリを?qū)g行してデータを取得し、そのデータをWebサイトに表示します。これは、ブログやニュースサイトなど、変更のコンテンツを表示する必要がある動(dòng)的なWebサイトの一般的なアプローチです。

      MySQLデータベースを保護(hù)するにはどうすればよいですか? 。まず、ファイアウォールやその他の適切なセキュリティ対策により、MySQLサーバーが安全な環(huán)境で実行されていることを確認(rèn)します。次に、MySQLアカウントに強(qiáng)力で一意のパスワードを使用します。第三に、MySQLアカウントの特権を制限して、タスクを?qū)g行するために必要な権限のみがあるようにします。最後に、既知の脆弱性から保護(hù)するためにMySQLサーバーを定期的に更新してパッチを當(dāng)てます。

      mySQLデータベースをバックアップするにはどうすればよいですか? 。このツールは、データベースをゼロから再作成できるコマンドを備えたSQLファイルを作成します。このツールをサーバーのコマンドラインから実行して、バックアップするデータベースの名前と作成するファイルの名前を指定できます。 ??> MySQLデータベースを最適化するには、いくつかのステップが含まれます。まず、The Optimize Tableコマンドを使用して、テーブルデータの物理ストレージを再編成し、ディスクスペースを削減できます。次に、MySQLクエリオプティマイザーを使用して、クエリの効率を向上させることができます。第三に、インデックス作成を使用して、データの検索をスピードアップできます。

      MySQLデータベースにデータをインポートするにはどうすればよいですか?

      Load Data Infileコマンドを使用してMySQLデータベースにデータをインポートできます。このコマンドは、テキストファイルから非常に高速でテーブルに行を読み取ります。ファイル名はリテラル文字列として指定する必要があります。

      mysqlデータベースからデータをエクスポートするにはどうすればよいですか?

      selectのoutfileコマンドを使用してmysqlデータベースからデータをエクスポートできます。このコマンドは、SERECTステートメントの結(jié)果をサーバーホストのファイルに書き込みます。指示。このコマンドは、テーブル內(nèi)の既存の行を変更します。テーブル名、更新する列、および新しい値を指定し、更新する行を選択する句を指定します。 > deleteコマンドを使用して、MySQLデータベースからデータを削除できます。このコマンドは、既存の行をテーブルから削除します。削除する行を選択するために、テーブル名とWhere句を指定します。削除されたデータを回復(fù)できないため、このコマンドに注意してください。

      以上がWebでMySQLからのデータの表示:はじめにの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

      このウェブサイトの聲明
      この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

      ホットAIツール

      Undress AI Tool

      Undress AI Tool

      脫衣畫像を無料で

      Undresser.AI Undress

      Undresser.AI Undress

      リアルなヌード寫真を作成する AI 搭載アプリ

      AI Clothes Remover

      AI Clothes Remover

      寫真から衣服を削除するオンライン AI ツール。

      Clothoff.io

      Clothoff.io

      AI衣類リムーバー

      Video Face Swap

      Video Face Swap

      完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

      ホットツール

      メモ帳++7.3.1

      メモ帳++7.3.1

      使いやすく無料のコードエディター

      SublimeText3 中國(guó)語(yǔ)版

      SublimeText3 中國(guó)語(yǔ)版

      中國(guó)語(yǔ)版、とても使いやすい

      ゼンドスタジオ 13.0.1

      ゼンドスタジオ 13.0.1

      強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

      ドリームウィーバー CS6

      ドリームウィーバー CS6

      ビジュアル Web 開発ツール

      SublimeText3 Mac版

      SublimeText3 Mac版

      神レベルのコード編集ソフト(SublimeText3)

      PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? Jun 14, 2025 am 12:27 AM

      Toversionaphp Basedificefectivivivity、useurl Basedversioning forclarity-andeaseaseasedease、depateversionedcodetoavoidconflicts、deprecateoldversions withclearcommunication、andconsider-customheadersally whendary.starttheversionionintheurl(e.g。、/api/v

      PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

      tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

      PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? Jun 14, 2025 am 12:25 AM

      ProceduralAndObject-OrientedProgramming(OOP)InphpdifferSifically-datability、andDatahandling.1.proceduralprogramsessusessuseSideSized funized、surtableforsmallscript.2.ooporganizescodeIntoclassesandobjects、ModelingReal-worden

      PHPの弱い參照(WeakMap)とは何ですか? PHPの弱い參照(WeakMap)とは何ですか? Jun 14, 2025 am 12:25 AM

      phpdoesnothaveabuiltinweakmapbutofferswutreferenceforsimilarfunctionality.1.weakreferenceallowsholdingReferences withoutpreventinggarbagecollectrection.2.itisusfulfurcaching、eventlisteners、およびmetadatawithectingovecting objectinimulatea

      PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

      PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

      PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

      はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

      PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

      PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場(chǎng)合にのみ使用されます。

      PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

      PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識(shí)は、整數(shù)と浮動(dòng)小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號(hào)は自動(dòng)的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識(shí)の使用 - 標(biāo)識(shí)、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識(shí)を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識(shí)を使用し、結(jié)果は浮動(dòng)小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識(shí)を採(cǎi)取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場(chǎng)合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

      See all articles