>데이터 베이스 >MySQL 튜토리얼 >내 PDO INSERT INTO 준비된 문이 작동하지 않는 이유는 무엇입니까?

내 PDO INSERT INTO 준비된 문이 작동하지 않는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-13 07:14:42521검색

Why Doesn't My PDO INSERT INTO Prepared Statement Work?

MySQL INSERT INTO 쿼리와 함께 PDO 준비 문 사용

PDO(PHP 데이터 개체)는 안전한 MySQL 상호 작용을 위해 준비된 명령문을 제공하지만 INSERT INTO 쿼리를 구성하는 것은 어려울 수 있습니다. 일반적인 문제와 해결 방법을 살펴보겠습니다.

다음 코드를 고려하세요.

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')");
$statement->execute();</code>

올바른 것처럼 보이는 이 코드는 데이터베이스를 채우지 못하는 경우가 많습니다. 왜요?

잃어버린 링크: 매개변수 바인딩

핵심은 매개변수 바인딩입니다. 이는 SQL 주입 취약점을 방지하고 코드 유지 관리성을 향상시킵니다. 값을 직접 삽입하는 대신 PDO는 자리 표시자를 사용합니다.

  1. 명명된 매개변수: SQL에서 :name와 같은 자리 표시자를 사용하고 연관 배열의 값을 execute()에 제공합니다.
  2. 위치 매개변수: ?를 자리 표시자로 사용하고 숫자로 인덱스된 배열의 값을 execute()에 제공합니다.

매개변수 바인딩으로 수정된 코드

다음은 명명된 매개변수를 사용하여 수정된 코드입니다.

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES (:name, :lastname, :age)");
$statement->execute([
    'name' => 'Bob',
    'lastname' => 'Desaunois',
    'age' => '18',
]);</code>

여기에는 위치 매개변수를 사용한 동일한 내용이 있습니다.

<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES (?, ?, ?)");
$statement->execute(['Bob', 'Desaunois', '18']);</code>

매개변수 바인딩의 장점

매개변수 바인딩은 데이터베이스 보안을 강화하고 코드를 더 효율적이고 읽기 쉽게 만듭니다. 이는 강력한 PDO 사용에 필수적입니다. 안전하고 효과적인 PHP 데이터베이스 프로그래밍을 위해서는 이 기술을 익히는 것이 중요합니다.

위 내용은 내 PDO INSERT INTO 준비된 문이 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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