찾다

 >  Q&A  >  본문

MySQLi 라이브러리가 기본적으로 명명된 매개변수를 지원하지 않는 이유는 무엇입니까?

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php에서 MySQLi 매개변수화된 쿼리 구문을 수정하세요.

으아악

하지만 절대 이렇게 하지 마세요:

으아악

제 생각에는 命名参数替换是在API级别实现的合理功能。令我惊讶的是,MySQLi 在库中只实现了 未命名参数.

타당한 이유가 있나요? PDO, DQL, ORM이 모두 쿼리에서 명명된 매개 변수를 사용하는 방식을 보면 이것이 이해가 되지 않습니다.

MySQLi 개발자들이 "우리는 게으르고 싶지 않다"는 상황에 빠지지 않기를 바랍니다. 그럴만한 이유가 있을 거라고 믿고, 그 이유, 혹은 그 이유를 찾는 방법을 찾고 있는 것 같아요. MySQLi 확장 라이브러리에서 명명된 매개변수가 구현되지 않는 이유

P粉024986150P粉024986150410일 전651

모든 응답(2)나는 대답할 것이다

  • P粉792026467

    P粉7920264672023-11-01 09:02:19

    전통적으로 MySQLi는 MySQL API입니다. 그 자체로는 아무 것도 추가하지 않으며 그 이유가 있습니다. 명명된 자리 표시자와 같은 기능을 추가하려면 (생각해 보면) 엄청난 양의 SQL 쿼리 구문 분석이 필요합니다. 물론 이것은 데이터베이스 API의 작업이 아닙니다. 다른 답변에서 말했듯이 API는 DAL 또는 DBAL이 아니며 다른 목적으로 사용됩니다.

    PDO는 더 이상 언어에서 보기 힘든 대단한 업적이며 Wes Furlong은 거의 혼자서 그 작업을 수행한 천재입니다. 그러나 PDO는 또 다른 이야기입니다. 이는 데이터베이스 액세스 추상화 계층이며, 이를 달성하려면 원하든 원하지 않든 쿼리 파서가 필요합니다. 이미 쿼리 파서가 있고 드라이버 중 하나가 이미 명명된 자리 표시자를 지원하므로 지원되는 모든 드라이버에 이를 추가하는 것이 당연합니다. 보시다시피 MySQLi에서는 모든 것이 변경됩니다.

    간단히 말하면 '게으름'이 아니라 '게으름'입니다. 규범을 따르는 것입니다.

    회신하다
    0
  • P粉533898694

    P粉5338986942023-11-01 00:14:00

    MYSQLi 명명된 매개변수는 다음 두 가지 주요 이유로 지원되지 않습니다.

    1. 래퍼와 함께 사용하도록 "의도된" 것입니다(저는 이 용어를 느슨하게 사용합니다). 그리고
    2. 상대편 PDO이 그렇습니다. 바퀴를 재발명할 필요가 없습니다

    포인트 1에 대해 자세히 설명하자면: mysqlimysqli,尽管与 PDO에 비해 많은 단점이 있음에도 불구하고 좋은 래퍼와 쉽게 비교할 수 있습니다. 즉, 이름이 지정된 매개변수(무엇보다도)는 래퍼에서 지원되지 않습니다. mysqli 그 자체. 이는 의도적으로 설계된 것이며 그 이유는 단 하나입니다:

    1. Mysqli 빠르고 유연한 라이브러리로 설계되었습니다.

    개발자가 기본 라이브러리에 더 많은 기능을 통합하면 직관에 반하여 유연성이 떨어지고 로드/실행하는 데 시간이 더 오래 걸립니다.

    mysqlipdo 둘 다 PHP 5(PDO 버전은 5.3이라고 생각합니다)로 출시되었으므로 용도가 다릅니다.

    더 빠른 실행 시간을 원하시나요? 래퍼 없이 mysqli를 사용하세요. 명명된 매개변수를 원하시나요? 이를 처리하려면 mysqli。您想要命名参数吗?使用 PDO 或构建 mysqli를 사용하거나 mysqli 래퍼를 빌드하세요. 하지만 이렇게 하면 실행 시간이 느려질 수 있다는 점에 유의하세요.

    회신하다
    0
  • 취소회신하다