http://php.net/manual/en/mysqli.quickstart.prepared-statements.php에서 MySQLi 매개변수화된 쿼리 구문을 수정하세요.
으아악하지만 절대 이렇게 하지 마세요:
으아악제 생각에는 命名参数
替换是在API级别实现的合理功能。令我惊讶的是,MySQLi 在库中只实现了 未命名参数
.
타당한 이유가 있나요? PDO, DQL, ORM이 모두 쿼리에서 명명된 매개 변수를 사용하는 방식을 보면 이것이 이해가 되지 않습니다.
MySQLi 개발자들이 "우리는 게으르고 싶지 않다"는 상황에 빠지지 않기를 바랍니다. 그럴만한 이유가 있을 거라고 믿고, 그 이유, 혹은 그 이유를 찾는 방법을 찾고 있는 것 같아요. MySQLi 확장 라이브러리에서 명명된 매개변수가 구현되지 않는 이유
전통적으로 MySQLi는 MySQL API입니다. 그 자체로는 아무 것도 추가하지 않으며 그 이유가 있습니다. 명명된 자리 표시자와 같은 기능을 추가하려면 (생각해 보면) 엄청난 양의 SQL 쿼리 구문 분석이 필요합니다. 물론 이것은 데이터베이스 API의 작업이 아닙니다. 다른 답변에서 말했듯이 API는 DAL 또는 DBAL이 아니며 다른 목적으로 사용됩니다.
PDO는 더 이상 언어에서 보기 힘든 대단한 업적이며 Wes Furlong은 거의 혼자서 그 작업을 수행한 천재입니다. 그러나 PDO는 또 다른 이야기입니다. 이는 데이터베이스 액세스 추상화 계층이며, 이를 달성하려면 원하든 원하지 않든 쿼리 파서가 필요합니다. 이미 쿼리 파서가 있고 드라이버 중 하나가 이미 명명된 자리 표시자를 지원하므로 지원되는 모든 드라이버에 이를 추가하는 것이 당연합니다. 보시다시피 MySQLi에서는 모든 것이 변경됩니다.
간단히 말하면 '게으름'이 아니라 '게으름'입니다. 규범을 따르는 것입니다.
MYSQLi
명명된 매개변수는 다음 두 가지 주요 이유로 지원되지 않습니다.PDO
이 그렇습니다. 바퀴를 재발명할 필요가 없습니다포인트 1에 대해 자세히 설명하자면:
mysqli
는mysqli
,尽管与PDO
에 비해 많은 단점이 있음에도 불구하고 좋은 래퍼와 쉽게 비교할 수 있습니다. 즉, 이름이 지정된 매개변수(무엇보다도)는 래퍼에서 지원되지 않습니다. mysqli 그 자체. 이는 의도적으로 설계된 것이며 그 이유는 단 하나입니다:Mysqli
빠르고 유연한 라이브러리로 설계되었습니다.개발자가 기본 라이브러리에 더 많은 기능을 통합하면 직관에 반하여 유연성이 떨어지고 로드/실행하는 데 시간이 더 오래 걸립니다.
mysqli
和pdo
둘 다 PHP 5(PDO 버전은 5.3이라고 생각합니다)로 출시되었으므로 용도가 다릅니다.더 빠른 실행 시간을 원하시나요? 래퍼 없이
mysqli
를 사용하세요. 명명된 매개변수를 원하시나요? 이를 처리하려면mysqli
。您想要命名参数吗?使用PDO
或构建mysqli
를 사용하거나mysqli
래퍼를 빌드하세요. 하지만 이렇게 하면 실행 시간이 느려질 수 있다는 점에 유의하세요.