PHP データベース FAQ 概要ページ 1/3_PHP チュートリアル
如果只有一种 方式使用数据库是正确的……
您可以用很多的方式创建数据库设计、数据库访问和基于数据库的 PHP 业务逻辑代码,但最终一般以错误告终。本文说明了数据库设计和访问数据库的 PHP 代码中出现的五个常见问题,以及在遇到这些问题时如何修复它们。
问题 1:直接使用 MySQL
一个常见问题是较老的 PHP 代码直接使用 mysql_ 函数来访问数据库。清单 1 展示了如何直接访问数据库。
以下为引用的内容: function get_user_id( $name ) $res = mysql_query( "SELECT id FROM users WHERE login='".$name."'" ); return $id; var_dump( get_user_id( 'jack' ) ); |
清单 1. Access/get.php
注意使用了 mysql_connect 函数来访问数据库。还要注意查询,其中使用字符串连接来向查询添加 $name 参数。
该技术有两个很好的替代方案:PEAR DB 模块和 PHP Data Objects (PDO) 类。两者都从特定数据库选择提供抽象。因此,您的代码无需太多调整就可以在 IBM® DB2®、MySQL、PostgreSQL 或者您想要连接到的任何其他数据库上运行。
使用 PEAR DB 模块和 PDO 抽象层的另一个价值在于您可以在 SQL 语句中使用 ? 操作符。这样做可使 SQL 更加易于维护,且可使您的应用程序免受 SQL 注入攻击。
使用 PEAR DB 的替代代码如下所示。
以下为引用的内容: require_once("DB.php"); function get_user_id( $name ) $res = $db->query( 'SELECT id FROM users WHERE login=?', return $id; var_dump( get_user_id( 'jack' ) ); |
リスト 2. Access/get_good.php
$dsn のデータベース接続文字列を除き、MySQL の直接使用がすべて削除されていることに注意してください。さらに、SQL では ? 演算子を介して $name 変数を使用します。次に、クエリ データは、query() メソッドの最後で配列を通じて送信されます。
問題 2: 自動インクリメント機能を使用していない
最新のデータベースと同様に、MySQL にはレコードごとに自動インクリメントの一意の識別子を作成する機能があります。さらに、最初に SELECT ステートメントを実行して最大の ID を検索し、次にその ID を 1 ずつインクリメントして、新しいレコードを検索するコードが引き続き表示されます。リスト 3 は、悪いパターンの例を示しています。
CREATE TABLE users (
id MEDIUMINT,
login TEXT,
password TEXT
); ( 1、 'jack' , 'pass' );
INSERT INTO users VALUES ( 2, 'joan', 'pass' );
リスト 3. .sql
コードをコピーします
function add_user( $name, $pass )
{
$rows = array( );
$dsn = 'mysql://root:password@localhost/bad_badid';
$db =& DB::Connect( $dsn, array() ); ) { die ($db->getMessage()); }
$res = $db->query( "SELECT max(id) FROM users" );
$id = null; >fetchInto ( $row ) ) { $id = $row[0]; }
$id += 1;
$sth = $db->prepare( "ユーザーの値に挿入(?,?,? )" ) ;
$db->execute( $sth, array( $id, $name, $pass ) );
return $id;
}
$id = add_user( 'jerry', 'pass' );
var_dump( $id );
?>
リスト 4. Add_user.php
add_user.php のコードは、最初に id の最大値を見つけるためにクエリを実行します。次に、ファイルは、ID 値を 1 増やして INSERT ステートメントを実行します。このコードは、負荷の高いサーバーでは競合状態で失敗します。さらに、それは非効率でもあります。
コードをコピー
コードは次のとおりです:
主キー(id)
);
ユーザーの値に挿入 (null, 'jack', 'pass' );
ユーザーの値に挿入 (null, ' jane', 'pass' );
リスト 5. Goodid.php
フィールドが空であってはいけないことを示すために NOT NULL フラグを追加しました。また、フィールドが自動インクリメントであることを示す AUTO_INCREMENT フラグと、フィールドが ID であることを示す PRIMARY KEY フラグも追加しました。これらの変更により、作業がスピードアップします。リスト 6 は、テーブルにユーザーを挿入する更新された PHP コードを示しています。
コードをコピーします
コードは次のとおりです:
$db =& DB::Connect( $dsn, array() );
if (PEAR::isError($db)) { die($db-> ;getMessage() ); }
$sth = $db->prepare( "INSERT INTO users VALUES(null,?,?)" );
$db->execute( $sth, array( $name, $pass ) ) ;
$res = $db->query( "SELECT last_insert_id()" );
$id = null; $res->fetchInto( $row ) ;行[0] }
$id;
$id = add_user( 'jerry', 'pass' );
リスト 6. Add_user_good.php

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
