>데이터 베이스 >MySQL 튜토리얼 >PHP SQL 준비 문에서 코드 반복을 어떻게 줄일 수 있습니까?

PHP SQL 준비 문에서 코드 반복을 어떻게 줄일 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 07:06:13946검색

How Can I Reduce Code Repetition in PHP SQL Prepared Statements?

PHP SQL 준비 문에서 코드 반복 극복

일반적인 PHP SQL 준비 문에서는 필드 이름이 여러 번 언급되어 중복이 발생합니다. 이 문제를 해결하려면 다음 해결 방법을 고려하십시오.

원시 PHP 기술

  • 쿼리에서 필드 절을 생략하고 누락된 필드에 대해 값 절에 기본값을 추가하세요.
  • 위치 자리 표시자를 사용하여 테이블에 정의된 null 값이나 기본값을 포함하여 모든 열에 값을 제공합니다. 정의.
$data = [$taskName, $startDate, $completedDate];
$sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)';
$db->prepare($sql)->execute($data);

도우미 함수 접근 방식

테이블 이름과 데이터 배열을 허용하는 삽입용 도우미 함수를 만들어 SQL 주입 문제를 처리합니다.

function escape_mysql_identifier($field){
    return "`".str_replace("`", "``", $field)."`";
}

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));
}
prepared_insert($db, 'tasks',[
    'task_name' => $taskName,
    'start_date' => $startDate,
    'completed_date' => $completedDate,
]);

객체 지향 프로그래밍

다음을 사용하여 아기 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.