Rumah pembangunan bahagian belakang tutorial php 分析介绍常见PHP数据库解决方案_PHP教程

分析介绍常见PHP数据库解决方案_PHP教程

Jul 20, 2016 am 10:57 AM
php memperkenalkan guna menganalisis wujud biasa kami pangkalan data artikel daripada penyelesaian menyambung berjumpa soalan

我们在使用PHP连接数据库的时候会遇到很多问题,文章这里揭露 PHP 应用程序中出现的常见数据库问题 —— 包括数据库模式设计、数据库访问和使用数据库的业务逻辑代码 —— 以及它们的解决方案。如果只有一种 方式使用数据库是正确的。

您可以用很多的方式创建PHP数据库设计、数据库访问和基于数据库的 PHP 业务逻辑代码,但最终一般以错误告终。本文说明了数据库设计和访问数据库的 PHP 代码中出现的五个常见问题,以及在遇到这些问题时如何修复它们。

PHP数据库问题 1:直接使用 MySQL

一个常见问题是较老的 PHP 代码直接使用 mysql_ 函数来访问数据库。清单 1 展示了如何直接访问数据库。

清单 1. Access/get.php

<ol class="dp-j">
<li class="alt"><span><span><?php   </span></span></li>
<li><span>function get_user_id( $name )   </span></li>
<li class="alt"><span>{   </span></li>
<li>
<span>$db = mysql_connect( </span><span class="string">'localhost'</span><span>, </span><span class="string">'root'</span><span>, </span><span class="string">'password'</span><span> );   </span>
</li>
<li class="alt">
<span>mysql_select_db( </span><span class="string">'users'</span><span> );   </span>
</li>
<li>
<span>$res = mysql_query( </span><span class="string">"SELECT id FROM users WHERE login='"</span><span>.$name.</span><span class="string">"'"</span><span> );   </span>
</li>
<li class="alt">
<span class="keyword">while</span><span>( $row = mysql_fetch_array( $res ) ) { $id = $row[</span><span class="number">0</span><span>]; }   </span>
</li>
<li>
<span class="keyword">return</span><span> $id;   </span>
</li>
<li class="alt"><span>}   </span></li>
<li>
<span>var_dump( get_user_id( </span><span class="string">'jack'</span><span> ) );   </span>
</li>
<li class="alt"><span>?> </span></li>
</ol>
Salin selepas log masuk

注意使用了 mysql_connect 函数来访问数据库。还要注意查询,其中使用字符串连接来向查询添加 $name 参数。该技术有两个很好的替代方案:PEAR DB 模块和 PHP Data Objects (PDO) 类。两者都从特定数据库选择提供抽象。因此,您的代码无需太多调整就可以在 IBM? DB2?、MySQL、PostgreSQL 或者您想要连接到的任何其他数据库上运行。使用 PEAR DB 模块和 PDO 抽象层的另一个价值在于您可以在 SQL 语句中使用 ? 操作符。这样做可使 SQL 更加易于维护,且可使您的应用程序免受 SQL 注入攻击。

清单 2. Access/get_good.php

<ol class="dp-c">
<li class="alt"><span><span><?php   </span></span></li>
<li>
<span class="keyword">require_once</span><span>(</span><span class="string">"DB.php"</span><span>);   </span>
</li>
<li class="alt">
<span class="keyword">function</span><span> get_user_id( </span><span class="vars">$name</span><span> )   </span>
</li>
<li><span>{   </span></li>
<li class="alt">
<span class="vars">$dsn</span><span> = </span><span class="string">'mysql://root:password@localhost/users'</span><span>;   </span>
</li>
<li>
<span class="vars">$db</span><span> =& DB::Connect( </span><span class="vars">$dsn</span><span>, </span><span class="keyword">array</span><span>() );   </span>
</li>
<li class="alt">
<span class="keyword">if</span><span> (PEAR::isError(</span><span class="vars">$db</span><span>)) { </span><span class="keyword">die</span><span>(</span><span class="vars">$db</span><span>->getMessage()); }   </span>
</li>
<li>
<span class="vars">$res</span><span> = </span><span class="vars">$db</span><span>->query( </span><span class="string">'SELECT id FROM users WHERE login=?'</span><span>,</span><span class="keyword">array</span><span>( </span><span class="vars">$name</span><span> ) );   </span>
</li>
<li class="alt">
<span class="vars">$id</span><span> = null;   </span>
</li>
<li>
<span class="keyword">while</span><span>( </span><span class="vars">$res</span><span>->fetchInto( </span><span class="vars">$row</span><span> ) ) { </span><span class="vars">$id</span><span> = </span><span class="vars">$row</span><span>[0]; }   </span>
</li>
<li class="alt">
<span class="keyword">return</span><span> </span><span class="vars">$id</span><span>;   </span>
</li>
<li><span>}   </span></li>
<li class="alt">
<span>var_dump( get_user_id( </span><span class="string">'jack'</span><span> ) );   </span>
</li>
<li><span>?> </span></li>
</ol>
Salin selepas log masuk

注意,所有直接用到 MySQL 的地方都消除了,只有 $dsn 中的数据库连接字符串除外。此外,我们通过 ? 操作符在 SQL 中使用 $name 变量。然后,查询的数据通过 query() 方法末尾的 array 被发送进来。

PHP数据库问题 2:不使用自动增量功能

与大多数现代数据库一样,MySQL 能够在每记录的基础上创建自动增量惟一标识符。除此之外,我们仍然会看到这样的代码,即首先运行一个 SELECT 语句来找到最大的 id,然后将该 id 增 1,并找到一个新记录。清单 3 展示了一个示例坏模式。

清单 3. Badid.sql

<ol class="dp-c">
<li class="alt"><span><span>DROP TABLE IF EXISTS users;   </span></span></li>
<li><span>CREATE TABLE users (   </span></li>
<li class="alt"><span>id MEDIUMINT,   </span></li>
<li><span>login TEXT,   </span></li>
<li class="alt"><span>password TEXT   </span></li>
<li><span>);   </span></li>
<li class="alt">
<span>INSERT INTO users VALUES ( 1, </span><span class="string">'jack'</span><span>, </span><span class="string">'pass'</span><span> );   </span>
</li>
<li>
<span>INSERT INTO users VALUES ( 2, </span><span class="string">'joan'</span><span>, </span><span class="string">'pass'</span><span> );   </span>
</li>
<li class="alt">
<span>INSERT INTO users VALUES ( 1, </span><span class="string">'jane'</span><span>, </span><span class="string">'pass'</span><span> ); </span>
</li>
</ol>
Salin selepas log masuk

这里的 id 字段被简单地指定为整数。所以,尽管它应该是惟一的,我们还是可以添加任何值,如 CREATE 语句后面的几个 INSERT 语句中所示。清单 4 展示了将用户添加到这种类型的模式的 PHP 代码。

清单 4. Add_user.php

add_user.php 中的代码首先执行一个查询以找到 id 的最大值。然后文件以 id 值加 1 运行一个 INSERT 语句。该代码在负载很重的服务器上会在竞态条件中失败。另外,它也效率低下。那么替代方案是什么呢?使用 MySQL 中的自动增量特性来自动地为每个插入创建惟一的 ID。

<ol class="dp-c">
<li class="alt"><span><span><?php   </span></span></li>
<li>
<span class="keyword">require_once</span><span>(</span><span class="string">"DB.php"</span><span>);   </span>
</li>
<li class="alt">
<span class="keyword">function</span><span> add_user( </span><span class="vars">$name</span><span>, </span><span class="vars">$pass</span><span> )   </span>
</li>
<li><span>{   </span></li>
<li class="alt">
<span class="vars">$rows</span><span> = </span><span class="keyword">array</span><span>();   </span>
</li>
<li>
<span class="vars">$dsn</span><span> = </span><span class="string">'mysql://root:password@localhost/bad_badid'</span><span>;   </span>
</li>
<li class="alt">
<span class="vars">$db</span><span> =& DB::Connect( </span><span class="vars">$dsn</span><span>, </span><span class="keyword">array</span><span>() );   </span>
</li>
<li>
<span class="keyword">if</span><span> (PEAR::isError(</span><span class="vars">$db</span><span>)) { </span><span class="keyword">die</span><span>(</span><span class="vars">$db</span><span>->getMessage()); }   </span>
</li>
<li class="alt">
<span class="vars">$res</span><span> = </span><span class="vars">$db</span><span>->query( </span><span class="string">"SELECT max(id) FROM users"</span><span> );   </span>
</li>
<li>
<span class="vars">$id</span><span> = null;   </span>
</li>
<li class="alt">
<span class="keyword">while</span><span>( </span><span class="vars">$res</span><span>->fetchInto( </span><span class="vars">$row</span><span> ) ) { </span><span class="vars">$id</span><span> = </span><span class="vars">$row</span><span>[0]; }   </span>
</li>
<li>
<span class="vars">$id</span><span> += 1;   </span>
</li>
<li class="alt">
<span class="vars">$sth</span><span> = </span><span class="vars">$db</span><span>->prepare( </span><span class="string">"INSERT INTO users VALUES(?,?,?)"</span><span> );   </span>
</li>
<li>
<span class="vars">$db</span><span>->execute( </span><span class="vars">$sth</span><span>, </span><span class="keyword">array</span><span>( </span><span class="vars">$id</span><span>, </span><span class="vars">$name</span><span>, </span><span class="vars">$pass</span><span> ) );   </span>
</li>
<li class="alt">
<span class="keyword">return</span><span> </span><span class="vars">$id</span><span>;   </span>
</li>
<li><span>}   </span></li>
<li class="alt">
<span class="vars">$id</span><span> = add_user( </span><span class="string">'jerry'</span><span>, </span><span class="string">'pass'</span><span> );   </span>
</li>
<li>
<span>var_dump( </span><span class="vars">$id</span><span> );   </span>
</li>
<li class="alt"><span>?> </span></li>
</ol>
Salin selepas log masuk

希望通过本文的介绍,能够让你对PHP数据库解决方案,更加了解。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445745.htmlTechArticle我们在使用 PHP 连接数据库的时候会遇到很多问题,文章这里揭露 PHP 应用程序中出现的常见数据库问题 包括数据库模式设计、数据库访问...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1675
14
Tutorial PHP
1278
29
Tutorial C#
1257
24
PHP dan Python: Paradigma yang berbeza dijelaskan PHP dan Python: Paradigma yang berbeza dijelaskan Apr 18, 2025 am 12:26 AM

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

Memilih antara php dan python: panduan Memilih antara php dan python: panduan Apr 18, 2025 am 12:24 AM

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

PHP dan Python: menyelam mendalam ke dalam sejarah mereka PHP dan Python: menyelam mendalam ke dalam sejarah mereka Apr 18, 2025 am 12:25 AM

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

Impak PHP: Pembangunan Web dan seterusnya Impak PHP: Pembangunan Web dan seterusnya Apr 18, 2025 am 12:10 AM

Phphassignificantelympactedwebdevelopmentandextendsbeyondit.1) itpowersmajorplatformslikeworderpressandexcelsindatabaseIntions.2) php'SadaptabilityAldoStoScaleforlargeapplicationFrameworksLikelara.3)

PHP vs Python: Gunakan Kes dan Aplikasi PHP vs Python: Gunakan Kes dan Aplikasi Apr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

Penggunaan PHP yang berterusan: Sebab -sebab ketahanannya Penggunaan PHP yang berterusan: Sebab -sebab ketahanannya Apr 19, 2025 am 12:23 AM

Apa yang masih popular adalah kemudahan penggunaan, fleksibiliti dan ekosistem yang kuat. 1) Kemudahan penggunaan dan sintaks mudah menjadikannya pilihan pertama untuk pemula. 2) Bersepadu dengan pembangunan web, interaksi yang sangat baik dengan permintaan HTTP dan pangkalan data. 3) Ekosistem yang besar menyediakan banyak alat dan perpustakaan. 4) Komuniti aktif dan Sumber Sumber Terbuka menyesuaikan mereka dengan keperluan baru dan trend teknologi.

MySQL: Data berstruktur dan pangkalan data hubungan MySQL: Data berstruktur dan pangkalan data hubungan Apr 18, 2025 am 12:22 AM

MySQL dengan cekap menguruskan data berstruktur melalui struktur jadual dan pertanyaan SQL, dan melaksanakan hubungan antara meja melalui kunci asing. 1. Tentukan format data dan taip apabila membuat jadual. 2. Gunakan kunci asing untuk mewujudkan hubungan antara jadual. 3. Meningkatkan prestasi melalui pengindeksan dan pengoptimuman pertanyaan. 4. Secara kerap sandaran dan memantau pangkalan data untuk memastikan pengoptimuman keselamatan data dan prestasi.

Peranan Oracle dalam dunia perniagaan Peranan Oracle dalam dunia perniagaan Apr 23, 2025 am 12:01 AM

Oracle bukan sahaja syarikat pangkalan data, tetapi juga pemimpin dalam pengkomputeran awan dan sistem ERP. 1. Oracle menyediakan penyelesaian yang komprehensif dari pangkalan data ke perkhidmatan awan dan sistem ERP. 2. Oraclecloud mencabar AWS dan Azure, menyediakan perkhidmatan IaaS, PaaS dan SaaS. 3. Sistem ERP Oracle seperti E-BusinessSuite dan FusionApplications membantu perusahaan mengoptimumkan operasi.

See all articles