ホームページ バックエンド開発 PHPチュートリアル PHP开发者常犯的10个MySQL错误更正剖析_PHP

PHP开发者常犯的10个MySQL错误更正剖析_PHP

Jun 01, 2016 pm 12:12 PM
mysqlエラー

1.使用MyISAM而不是InnoDB

  完全错误,反驳理由:

  首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。

  另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。

  最佳方法还是针对具体业务具体处理,例如论坛中版块表,新闻分类表,各种码表等长时间不操作的表,还是要用性能优异的MyISAM引擎。

  而需要用到事务处理的例如用户、账目、流水等严格要求数据完整性和时序性的,则需要用InnoDB引擎,并且应用也要用好事务处理机制。当然,事务处理必然要带来大量的性能损耗,但是这在简单高并发应用上是必须的。

  最后,外键约束在公共web互联网应用上一般是不用的,因为他会严重影响性能。数据完整性还是靠程序员或者应用架构本身的健壮来维护。而正规的第三范式只是在企业内部MIS系统和12306这种网站上使用。

  2.使用PHP的mysql方法

  不完全错,但要酌情选用:

  mysqli固然好,但是不是所有的服务器都为PHP编译了mysqli的支持。

  当你的应用如果是能确定只用自己部署的服务器,而应用也是完全自己开发,则mysqli是最好的选择。

  但是一旦你的应用有可能部署在虚拟主机或者由其他人部署(例如分布式项目),还是老老实实使用mysql函数集吧,好好封装一下或者使用成熟框架杜绝sql注入。

  3.不过滤用户输入

  这一点不用说了,要么MagicQuote,要么选用成熟框架。sql注入老话题了。

  4.不使用UTF-8

  大部分情况下对,但也要认真考虑:

  要知道,一个UTF-8字符占3个字节,所以比GBK等其他编码的文件大33%。换句话说,相同的网页用UTF-8编码如果是100KB,那么换成GBK编码则只有66KB。所以即便你的PHP确定要用UTF-8,那么前端页面也要根据情况选择需要的编码。但是,如果PHP用UTF-8,前端模版是GBK,再加上模版引擎不强大,那么转码工作够你受的。所以尽可能的选用自己需要的编码,而不是简单的选择UTF-8了事。

  最后啰嗦一句:UTF-8下:strlen("我")=3,而GBK下:strlen("我")=2

  5.该用SQL的地方使用PHP

  同样酌情考虑:

  例如,有些人习惯在建表时,默认值填写CURRENT_TIMESTAMP,用来达到注册时间、发帖时间的效果。 或者在时间判断的SQL语句中,写类似SELECT x FROM tab1 WHERE regdate 正确做法是:不要使用MySQL的任何时间函数,而是在应用里计算时间。如果是分布式应用,一定要有时间服务器来统一管理时间。

  而文中说的一些MySQL数学函数 ,也是要慎用。因为在大型应用中,数据库的负担往往是最大的,而复杂的WHERE语句又是造成慢查询的元凶。所以,要把计算尽可能的放在廉价的、不影响全局稳定的应用服务器上,而不是核心数据库上。

  6.不优化查询

  这点也不用说了,大型应用上甚至不允许使用各种JOIN,哪怕生写两条查询,查回来在用PHP合并数据。

  7.使用错误的数据类型

  INT,TinyINT,VARCHAR,CHAR,TEXT这些字段类型的合理选用无可厚非。

  而Date、DateTime、TIMESTAMP这三种类型,在大型应用中是绝对不可以使用的,而是要用INT(10) UNSIGNED代替。

  一个是性能,另外就是应用中尤其是PHP对UNIX_TIMESTAMP时间戳的转化实在太方便了。用Date要输出各种时间格式反而麻烦。

  8.在SELECT查询中使用*

  共勉

  9.索引不足或者过度索引

  索引是必须的,但是如果索引都解决不了的查询,考虑memcache或者nosql解决方案吧。

  10.不备份

  这条是作者凑数么?

  11.另外:不考虑其他数据库

  这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL 接続エラー 1049 に対処するにはどうすればよいですか? MySQL 接続エラー 1049 に対処するにはどうすればよいですか? Jun 29, 2023 am 09:50 AM

MySQL 接続エラー 1049 に対処するにはどうすればよいですか? MySQL は一般的に使用されるリレーショナル データベース管理システムであり、多くの開発者やシステム管理者がデータの保存と管理に MySQL を使用しています。ただし、MySQL を使用している場合、接続エラー 1049 の問題が発生することがあります。この記事では、接続エラー 1049 の原因と、この問題を解決するためのいくつかの方法を紹介します。 MySQL 接続エラー 1049 は通常、データベースが存在しないか、データベース名が間違っていることが原因で発生します。 MySQLサービスに接続する場合

「フィールド リスト」の不明な列「column_name」 - MySQL エラーを解決する方法: フィールド リストに不明な列があります 「フィールド リスト」の不明な列「column_name」 - MySQL エラーを解決する方法: フィールド リストに不明な列があります Oct 05, 2023 am 10:44 AM

タイトル: Unknowncolumn'column_name'in'fieldlist'-MySQL エラーの解決方法: フィールド リストの列が不明です。特定のコード例が必要です。クエリまたは操作に MySQL データベースを使用する場合、次のようなエラー メッセージが表示されることがあります:「Unknowncolumn'」 column_name'in'fieldlist'"、つまり、フィールド リストに不明な列エラーが存在します。これは通常、

mysqlデータベースの初期化エラーを解決する方法 mysqlデータベースの初期化エラーを解決する方法 Apr 14, 2024 pm 07:12 PM

MySQL データベースの初期化失敗の問題を解決するには、次の手順に従います。 権限をチェックし、適切な権限を持つユーザーを使用していることを確認します。データベースがすでに存在する場合は、それを削除するか、別の名前を選択します。テーブルが既に存在する場合は、テーブルを削除するか、別の名前を選択します。 SQL ステートメントに構文エラーがないか確認してください。 MySQL サーバーが実行中であり、接続可能であることを確認します。正しいポート番号を使用していることを確認してください。他のエラーの詳細については、MySQL ログ ファイルまたはエラー コード ファインダーを確認してください。

MySQL 接続エラー 1017 が発生した場合はどうすればよいですか? MySQL 接続エラー 1017 が発生した場合はどうすればよいですか? Jun 30, 2023 am 11:57 AM

MySQL 接続エラー 1017 に対処するにはどうすればよいですか? MySQL は、Web サイトの開発やデータ ストレージで広く使用されているオープン ソースのリレーショナル データベース管理システムです。ただし、MySQL を使用すると、さまざまなエラーが発生する可能性があります。一般的なエラーの 1 つは、接続エラー 1017 (MySQL エラー コード 1017) です。接続エラー 1017 は、データベース接続の失敗を示します。通常、ユーザー名またはパスワードが間違っていることが原因で発生します。 MySQL が指定されたユーザー名とパスワードを使用した認証に失敗した場合

PHP は、前の MySQL 操作でのエラー メッセージの数値エンコーディングを返します。 PHP は、前の MySQL 操作でのエラー メッセージの数値エンコーディングを返します。 Mar 22, 2024 pm 12:31 PM

この記事では、前回の Mysql 操作で PHP から返されたエラー メッセージの数値エンコードについて詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです. . PHP を使用して MySQL エラー情報を返す 数値エンコーディング はじめに mysql クエリを処理するときにエラーが発生する場合があります。これらのエラーを効果的に処理するには、エラー メッセージの数値エンコーディングを理解することが重要です。この記事では、php を使用して Mysql エラー メッセージの数値エンコーディングを取得する方法を説明します。エラー情報の数値エンコードを取得する方法 1. mysqli_errno() mysqli_errno() 関数は、現在の MySQL 接続の最新のエラー番号を返します。構文は次のとおりです: $erro

MySQLデータベースのリカバリの進行状況を確認する方法 MySQLデータベースのリカバリの進行状況を確認する方法 Feb 24, 2024 pm 12:24 PM

MySQL は、非常に一般的に使用されているオープンソースのリレーショナル データベース管理システムであり、安定性、効率性、柔軟性などの特徴を備えており、さまざまな種類のアプリケーションで広く使用されています。 MySQLを利用していると必ずデータベースの復旧作業が発生しますが、MySQLデータベースの復旧状況をいかに正確に確認するかがより重要な課題となっています。 MySQL データベースのリカバリの進行状況は、MySQL エラー ログを表示することで取得できます。 MySQL エラー ログには、すべてのデータベース操作記録が記録されます。

一般的な MySQL エラーに対する解決策のコレクション 一般的な MySQL エラーに対する解決策のコレクション Jun 15, 2023 pm 02:58 PM

開発中に MySQL を頻繁に扱う場合、いくつかの一般的なエラーが発生することがあります。エラーによっては MySQL が適切に動作しなくなる場合もあれば、プログラムのパフォーマンスに影響を及ぼす場合もあります。ここでは、いくつかの一般的な MySQL エラーとその解決策を示します。 MySQL サーバーに接続できません。MySQL サーバーに接続すると、次のエラーが発生する場合があります: Can'tconnecttoMySQLserveron'localhost'(10061)Ac

MySQL エラー 1171 を解決する方法 MySQL エラー 1171 を解決する方法 Jan 09, 2024 pm 03:59 PM

解決策: 1. データ型をチェックして、インデックスを作成または変更する列のデータ型に互換性があることを確認します。2. インデックスを作成する列で関数や式を使用しないようにします。3. 明示的な型変換を使用します。インデックス付きカラムでは関数または式を使用する必要があり、明示的な型変換を使用するようにしてください。 4. MySQL のバージョンとドキュメントを確認して、インデックスとデータ型の詳細を確認してください。 5. クエリを最適化します。インデックスの有効活用 6. 他のツールや手法の利用検討等

See all articles