ホームページ >データベース >mysql チュートリアル >PHP SQL プリペアドステートメントを使用するときにコードの繰り返しを回避するにはどうすればよいですか?

PHP SQL プリペアドステートメントを使用するときにコードの繰り返しを回避するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 18:30:14877ブラウズ

How Can I Avoid Code Repetition When Using PHP SQL Prepared Statements?

PHP SQL プリペアド ステートメントでのコードの繰り返しの回避

ほとんどの PHP SQL プリペアド ステートメントの例では、フィールド名が複数回繰り返されます。変更が必要な場合、この繰り返しは冗長になり、エラーが発生しやすくなります。冗長性を最小限に抑えるための解決策をいくつか示します。

Raw PHP

クエリ内のフィールド句を省略し、位置プレースホルダーを使用することで、冗長性を減らすことができます。 Null またはデフォルト値であっても、テーブルのすべての列に値があることを確認します。

$data = [$taskName, $startDate, $completedDate];
$sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)';
$db->prepare($sql)->execute($data);

ヘルパー関数

挿入用のヘルパー関数を作成すると、コード。この関数は、フィールド名による SQL インジェクションに注意する必要があります。

function prepared_insert($conn, $table, $data) {
    $keys = array_keys($data);
    $keys = array_map('escape_mysql_identifier', $keys);
    $fields = implode(",", $keys);
    $table = escape_mysql_identifier($table);
    $placeholders = str_repeat('?', count($keys) - 1) . '?';
    $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)";
    $conn->prepare($sql)->execute(array_values($data));
}

Baby Object-Relational Mapper (ORM)

このアプローチでは、オブジェクト指向プログラミングを使用して自動化します。インサートの作成。基本クラスには共通のメソッドが含まれており、特定のテーブルは子クラスとして定義されます。

public function create($data): int
{
    $fields = $this->makeFieldList($data);
    $placeholders = str_repeat('?', count($data) - 1) . '?';

    $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
    $this->sql($sql, array_values($data));

    return $this->db->lastInsertId();
}
class UserGateway extends BasicTableGateway {
    protected $table = 'gw_users';
    protected $fields = ['email', 'password', 'name', 'birthday'];
}

$data = [
    'email' => '[email protected]',
    'password' => 123,
    'name' => 'Fooster',
];

$userGateway = new UserGateway($pdo);

$id = $userGateway->create($data);
echo "Create: $id", PHP_EOL;

これらのソリューションは、使用するコードを減らし、フィールド名の重複を避けることで冗長性を排除します。

以上がPHP SQL プリペアドステートメントを使用するときにコードの繰り返しを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。