0x01: PDO が正常にインストールされているかどうかをテストします
次のコードを実行します。パラメーター エラーが表示された場合は、PDO がインストールされています。オブジェクトが存在しない場合は、PHP 構成ファイル php.ini を変更し、php_pdo_yourssqlserverhere.extis の前のコメントをキャンセルします。
0x02: データベース
に接続しますApache サーバーを実行し、サーバーが実行されていて PDO が正常にインストールされていることを確認してから、データベースに接続しましょう。
0x03: 基本クエリ
PDO で query メソッドと exec メソッドを使用すると、データベース クエリが非常に簡単になります。クエリ結果の行数を取得する場合、exec は非常に使いやすいため、SELECT クエリ ステートメントに非常に役立ちます。
0x04: 行数を取得
Mysql データベースを使用している場合、次のコードに示すように、PDO ステートメントには結果セット内の行数を取得する rowCount メソッドが含まれています。
0x05: 結果セットを走査します
PDO ステートメントは、次のコードに示すように、forech ステートメントを使用して走査できます。PDO は、入力文字列内の引用符のある場所で特殊文字をエスケープできる、quote と呼ばれるメソッドを提供します。
PDO は、exec() メソッドを使用して UPDATE、DELETE、INSERT 操作を実装できます。実行後、影響を受ける行の数が返されます。
0x08: 準備されたステートメント
実行メソッドとクエリは依然として PHP で広く使用されサポートされていますが、PHP 公式 Web サイトでは、代わりに準備されたステートメントを使用することが依然として求められています。なぜ?主な理由は、そのほうが安全だからです。準備されたステートメントは実際のクエリにパラメーターを直接挿入しないため、潜在的な SQL インジェクションの多くが回避されます。
ただし、何らかの理由で、PDO は実際には前処理を使用せず、SQL サーバーに渡す前に前処理をシミュレートしてステートメントにパラメータ データを挿入します。これにより、システムが SQL インジェクションに対して脆弱になります。
SQL サーバーが実際には前処理をサポートしていない場合は、次のように PDO の初期化中にパラメータを渡すことで、この問題を簡単に解決できます。
これが最初に準備されたステートメントです:
上記のコードに示されているように、パラメーターを作成するには、名前付きと匿名の 2 つの方法があります (1 つのステートメントに同時に使用することはできません)。次に、bindValue を使用して入力を入力できます:
$statement2->bindValue(':name', 'Pie');
$statement2->bindValue(':healthy', false);
名前付きパラメータを使用する場合は、コロン (:) を含める必要があることに注意してください。 PDO には、参照によって値をバインドできる bindingParam メソッドもあります。これは、ステートメントの実行時に対応する値のみを検索することを意味します。
あとはステートメントを実行するだけです:
bindValue のみを使用することによって引き起こされるコードの断片化を避けるために、次のように配列を実行メソッドのパラメータとして使用できます。
0x09: トランザクション
トランザクションは一連のクエリを実行しますが、その結果はデータベースに保存されません。この利点は、4 つの相互依存する挿入ステートメントを実行する場合、1 つが失敗したときにロールバックして、他のデータをデータベースに挿入できないようにして、相互依存するフィールドを正しく挿入できることです。使用するデータベース エンジンがトランザクションをサポートしていることを確認する必要があります。
0x10: トランザクションの開始
beginTransaction() メソッドを使用するだけでトランザクションを開始できます。
その後、データベース操作ステートメントの実行を続行し、最後にトランザクションをコミットできます。
MySQLi にも rollBack() に似たメソッドがありますが、すべてのタイプをロールバックするわけではありません (MySQL での DROP TABLE の使用など)。このメソッドはあまり信頼できません。方法。
0x11: その他の便利なオプション
検討できるオプションはいくつかあります。これらは、オブジェクトを初期化するときに 4 番目のパラメーターとして入力できます。
PDO::ATTR_DEFAULT_FETCH_MODE
$result['column_name'] を使用できる PDO::FETCH_ASSOC や、匿名オブジェクトを返す PDO::FETCH_OBJ など、PDO が返す結果セットのタイプを選択できます。 $result->column_name
を使用するには次のように、個々のクエリごとに読み取りモードを設定することで、結果を特定のクラス (モデル) に入れることもできます。
PDO::ATTR_ERRMODE
これについては上ですでに説明しましたが、TryCatch が好きな人は PDO::ERRMODE_EXCEPTION を使用する必要があります。何らかの理由で PHP 警告をスローしたい場合は、PDO::ERRMODE_WARNING を使用します。
PDO::ATTR_TIMEOUT
読み込み時間が心配な場合は、この属性を使用してクエリのタイムアウトを秒単位で指定できます。設定した時間を超えると、PDO:: を除き、デフォルトで E_WARNING 例外がスローされることに注意してください。 ATTR_ERRMODE が変更されました。