집 >데이터 베이스 >MySQL 튜토리얼 >내 PDO가 'INSERT INTO' 문을 준비하지 못하는 이유는 무엇입니까?
MySQL의 INSERT INTO
에 대한 PDO 준비 문 문제 해결
MySQL INSERT INTO
작업에 PDO 준비 문을 사용하면 데이터가 삽입되지 않는 등 예상치 못한 결과가 발생할 수 있습니다. 일반적인 원인과 해결 방법을 살펴보겠습니다.
다음 코드를 고려하세요.
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
이 코드는 testtable
에 새 행을 삽입하려고 시도하지만 데이터베이스를 채우지 못하는 경우가 많습니다.
잃어버린 링크: 매개변수 바인딩
문제는 매개변수 바인딩이 없다는 것입니다. 준비된 문은 SQL 삽입에 대한 보안을 강화하지만 값을 쿼리에 직접 포함하는 대신 값에 대한 자리 표시자를 사용해야 합니다. 이를 통해 특히 여러 데이터 세트로 동일한 쿼리를 실행할 때 더욱 안전하고 효율적인 실행이 가능해집니다.
솔루션: 명명된 매개변수와 위치 매개변수
매개변수 바인딩을 올바르게 구현하는 두 가지 방법은 다음과 같습니다.
1. 명명된 매개변수:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ ':fname' => 'Bob', ':sname' => 'Desaunois', ':age' => '18', ]);</code>
이는 :fname
메서드 배열 내의 값에 매핑되는 명명된 자리 표시자(:sname
, :age
, execute()
)를 사용합니다.
2. 위치 매개변수:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
물음표(?
)를 자리 표시자로 사용하며 해당 값은 execute()
메서드의 배열에 제공됩니다. 여기서는 순서가 중요합니다.
두 접근 방식 모두 매개변수를 효과적으로 바인딩하여 SQL 삽입을 방지하고 안정적인 데이터 삽입을 보장합니다. 코딩 스타일과 프로젝트 요구 사항에 가장 적합한 방법을 선택하세요. 최적의 보안을 유지하려면 준비된 문이 있더라도 쿼리에 사용하기 전에 항상 사용자 입력을 삭제해야 합니다.
위 내용은 내 PDO가 'INSERT INTO' 문을 준비하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!