>백엔드 개발 >PHP 문제 >3분 안에 PHP의 MySQLi를 이해하도록 안내합니다.

3분 안에 PHP의 MySQLi를 이해하도록 안내합니다.

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-06-24 16:30:301965검색

이 글부터 MySQLi 확장에 대해 배워보겠습니다. MySQL(원래) 확장은 우리 중 많은 사람들이 처음 PHP를 배우기 시작할 때 데이터베이스에 연결하는 입문 교사라고 할 수 있습니다. 이제 절차적 코드를 사용하여 데이터베이스를 작동하려면 mysqli 확장만 사용할 수 있습니다.

3분 안에 PHP의 MySQLi를 이해하도록 안내합니다.

이 글을 시작으로 PDO 외에 핵심 MySQLi 확장인 또 다른 MySQL 확장에 대한 학습을 ​​마쳤습니다. 아마도 그 조상인 MySQL(원래) 확장은 우리 중 많은 사람이 PHP를 처음 배우기 시작했을 때 데이터베이스 연결을 위한 필수 가이드였습니다. 그러나 시대가 변하면서 MySQL(원본) 확장은 PHP7에서 완전히 폐기되었습니다. 이제 절차적 코드를 사용하여 데이터베이스를 작동하려면 mysqli 확장만 사용할 수 있습니다. 물론, mysqli 확장은 객체 지향 쓰기도 지원합니다.

MySQLi란 무엇입니까

MySQLi 확장을 사용하면 MySQL4.1 이상 데이터베이스에서 제공되는 기능에 액세스할 수 있습니다. 이는 다른 DNS를 통해 다른 데이터베이스에 연결할 수 있는 PDO와 달리 MySQL 데이터베이스를 특별히 대상으로 합니다.

MySQL과 PDO의 차이점과 연관성

우선, 최초의 MySQL 확장을 검토해 보겠습니다.

  • 프로시저에만

  • 저장 프로시저, 다중 문 실행, 준비된 문을 지원하지 않습니다.

  • PHP7이 삭제되어 전혀 지원되지 않습니다

PDO

  • 만 지원됩니다. 객체 메소드를 사용하면

  • 다양한 데이터베이스에 연결할 수 있으며, 데이터베이스를 전환하면 변경 사항이 줄어들고 코드를 수정할 필요조차 없을 수도 있습니다.

  • 저장 프로시저, 다중 문 실행, 준비된 문 지원

마지막은 MySQLi입니다.

  • 객체 지향 및 프로세스 지향 작성 방법 모두 지원

  • MySQL 데이터베이스만 지원

  • 저장 프로시저, 다중 명령문 실행, 준비된 명령문 지원

  • PHP 및 MySQL의 버전 업데이트를 따르세요. , 업데이트할 수 있습니다. 더 많은 MySQL 고급 기능을 빠르게 지원합니다.

이 세 가지 기능으로 판단하면 MySQL(원본) 확장은 PDO 또는 MySQLi의 PHP 버전을 지원하는 한 오래된 프로젝트에서도 권장되지 않습니다. 데이터베이스 연결을 이 두 가지 방법 중 하나로 변환하는 것을 고려해야 합니다. PHP5 환경에서 MySQL(원래) 확장 기능을 사용하는 방법을 아직 배우고 있다면 내려놓으셔도 됩니다.

PDO와 MySQLi 사이의 선택은 보는 사람에 따라 다릅니다. 실제로 둘 사이에는 큰 차이가 없지만 현대의 대규모 프레임워크는 기본적으로 PDO를 기본 데이터베이스 연결로 캡슐화합니다. 결국 PDO의 이식성은 이러한 일반 프레임워크를 다른 데이터베이스에 연결하는 것을 용이하게 할 수 있습니다. 일부 소규모 프레임워크나 프로젝트에서는 여전히 MySQLi를 볼 수 있습니다.

물론, 틈새 시장이 나쁜 것은 아닙니다. 일상적인 개발과 마찬가지로 PHP 환경에서는 다른 데이터베이스를 거의 사용하지 않으므로 자체 소규모 프로젝트에서는 데이터베이스를 운영하기 위해 MySQLi 세트를 완전히 사용하는 것이 더 편리할 것입니다. 편리하고 빠릅니다. 동시에 이전 프로젝트가 PHP7 버전으로 전환하려는 경우, 이전에 연결된 MySQL(원본) 데이터베이스를 사용했다면 MySQL(원본) 코드를 MySQLi로 빠르게 교체할 수 있습니다.

확장 설치 및 MySQL8 관련 참고 사항

MySQLi 확장은 PHP 소스 코드와 함께 출시됩니다. PHP를 컴파일할 때 --with-mysqli만 추가하면 됩니다. 이제 기본 데이터베이스 드라이버는 mysqlnd를 사용하며 libmysql은 기본적으로 제거되었습니다. 따라서 컴파일 시 다른 매개변수를 추가할 필요 없이 직접 컴파일하면 됩니다.

MySQL8 서버는 기본적으로 caching_sha2_password를 비밀번호 암호화로 사용하므로 MySQL8에 연결할 때 주의가 필요합니다. PHP7.2.4 이전 버전의 MySQLi는 mysql_native_password를 사용하여 연결 비밀번호를 암호화하므로 데이터베이스에 연결할 수 없게 됩니다. my.cnf 파일을 수정하고 default_authentication_plugin=mysql_native_password를 설정하면 MySQL8도 mysql_native_password를 사용하여 사용자 비밀번호를 암호화할 수 있습니다.

프로시저 지향

위에서 언급했듯이 MySQLi는 객체 지향과 프로시저 지향이라는 두 가지 쓰기 방법을 지원합니다. 간단히 이해하자면 작성 방법 중 하나는 MySQL(원래) 확장이고 다른 작성 방법은 PDO와 유사하다는 것입니다. 먼저 과정 지향적 글쓰기를 살펴보겠습니다.

$mysqli = mysqli_connect("localhost", "root", "", "blog_test");
$res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user");
$row = mysqli_fetch_assoc($res);
print_r($row);

MySQL(원본) 확장 코드를 이식하는 것이 정말 편리하다고 생각하지 않나요? 모든 메소드 이름을 mysqli_xxx로 변경하면 됩니다.

객체 지향

객체 지향은 PDO와 약간 비슷합니다. 먼저 연결 핸들 클래스를 얻은 다음 이 클래스를 작동해야 합니다.

$mysqli = new mysqli("localhost", "root", "", "blog_test");
$res = $mysqli->query("SELECT * FROM zyblog_test_user");
$row = $res->fetch_assoc();
print_r($row);

面向对象和面向过程混用

另外,这两种方式还可以混合使用,不过并不推荐。混合起来使用的话很容易让看代码的人晕头转向。所以,最好还是在一个项目中就坚持使用一种方式。

$mysqli = new mysqli("localhost", "root", "", "blog_test");
$res = mysqli_query($mysqli, "SELECT * FROM zyblog_test_user");
$row = $res->fetch_assoc();
print_r($row);

在这段代码中,我们实例化了一个 mysqli 对象,然后使用面向过程的 mysqli_query() 函数来执行语句,接着又使用面向对象的方式来获取结果集。是不是很乱?但是它是可以正常运行的。

总结

从上面的内容中可以看出,PDO 的特点是支持多种不同类型的数据库,就像 Java 中的 JDBC 一样。而 MySQLi 虽然只支持 MySQL 数据库,但它却可以同时支持面向对象和面向过程两种写法。是我们针对老项目代码进行升级优化的好帮手。同时,它还是现在入门 PHP 学习相关数据库操作的首选。在接下来的文章中,我们将默认只使用 面向对象 式的写法来继续学习 MySQLi 扩展相关的知识。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/4.PHP中的MySQLi扩展学习(一)MySQLi介绍.php

推荐学习:php视频教程

위 내용은 3분 안에 PHP의 MySQLi를 이해하도록 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제