이 글부터 MySQLi 확장에 대해 배워보겠습니다. MySQL(원래) 확장은 우리 중 많은 사람들이 처음 PHP를 배우기 시작할 때 데이터베이스에 연결하는 입문 교사라고 할 수 있습니다. 이제 절차적 코드를 사용하여 데이터베이스를 작동하려면 mysqli 확장만 사용할 수 있습니다.
이 글을 시작으로 PDO 외에 핵심 MySQLi 확장인 또 다른 MySQL 확장에 대한 학습을 마쳤습니다. 아마도 그 조상인 MySQL(원래) 확장은 우리 중 많은 사람이 PHP를 처음 배우기 시작했을 때 데이터베이스 연결을 위한 필수 가이드였습니다. 그러나 시대가 변하면서 MySQL(원본) 확장은 PHP7에서 완전히 폐기되었습니다. 이제 절차적 코드를 사용하여 데이터베이스를 작동하려면 mysqli 확장만 사용할 수 있습니다. 물론, mysqli 확장은 객체 지향 쓰기도 지원합니다.
MySQLi 확장을 사용하면 MySQL4.1 이상 데이터베이스에서 제공되는 기능에 액세스할 수 있습니다. 이는 다른 DNS를 통해 다른 데이터베이스에 연결할 수 있는 PDO와 달리 MySQL 데이터베이스를 특별히 대상으로 합니다.
우선, 최초의 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로 빠르게 교체할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!