PHP进阶-php文件读取与连接数据库基础部分

php连接数据库

apche-》(调用php)php-》(加载mysql扩展)mysql

首先在php的文件夹里面的ini文件修改,以至于可以加载mysql,还要看php的拓展文件夹里面有没有mysql的拓展包,默认是有的。

php连接mysql的方法有两种。

MySQLi 和 PDO 有它们自己的优势:

PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。

1MySQLi extension

2PDO (PHP Data Objects)

我研究了一下第一种,第二种等有机会遇到再说了。

关于如何去写具体也有两点,一种是面向对象,一种是面向过程,我为了图省事只记住了面向对象的方法,现在明白了面向对象的好处了。

<?php

$servername = "localhost:3306";

$username = "root";

$password = "12345678";

// 创建连接

conn = new mysqli(servername, $username, $password);

// 检测连接

if ($conn->connect_error) {

die("连接失败: " . $conn->connect_error);

}

echo "连接成功";

?>

mysqli()是php的内置类

conn-\>connect_error,conn 是通过 new mysqli(...) 创建的代表数据库连接的对象。connect_error 是 mysqli 对象的一个属性,它存储了在连接数据库过程中发生的错误信息。如果连接成功,这个属性的值将为空字符串,表示没有错误发生;如果连接失败,它将包含一个描述错误原因的字符串,例如 "无法连接到数据库服务器""访问被拒绝" 等具体的错误信息。

php创建数据库

<?php

$servername = "localhost";

$username = "username";

$password = "password";

// 创建连接

conn = new mysqli(servername, $username, $password);

// 检测连接

if ($conn->connect_error) {

die("连接失败: " . $conn->connect_error);

}

// 创建数据库

$sql = "CREATE DATABASE myDB";

if (conn-\>query(sql) === TRUE) {

echo "数据库创建成功";

} else {

echo "Error creating database: " . $conn->error;

}

$conn->close();

在// 创建数据库之前的内容是重复的,不进行详细思考了。

$sql = "CREATE DATABASE myDB"; 这行代码定义了一个 SQL 语句字符串。在 SQL 中,CREATE DATABASE 是用于创建新数据库的命令,这里的 myDB2 就是要创建的数据库的名称。

但是只有这一行实际什么也没有发生,因为这只是字符串而已。

conn-\>query(sql) 这部分是通过之前创建的 $conn(也就是代表和 MySQL 数据库服务器连接的那个对象)来执行这条 CREATE DATABASE 的 SQL 语句。

也就是说实际执行是conn-\>query(sql)这么一段话。

那其实可以简写一下上述的代码,作为练习使用。上面的代码和下面的代码有着相同的效果

<?php

$conn = new mysqli("localhost", "root", "12345678");//连接数据库

$conn->query("CREATE DATABASE myikun23");//创建数据库

$conn->close();//关闭连接

//这时候去mysql里面看就能看见"myikun23"了

?>

思考

conn-\>query(sql)这一段明明是在if里面,为什么会被执行呢?

计算机在执行 if 语句时,首先要做的就是对这个表达式进行求值,以此来确定条件是否满足。

对于 conn-\>query(sql) 这部分,它是调用 $conn 对象(这个对象代表与 MySQL 数据库的连接)的 query 方法,并传入 $sql 这个包含 SQL 语句的字符串参数,目的是让数据库去执行这条 SQL 语句。这个 query 方法执行后,会返回一个结果值,这个值就会作为整个表达式的值来参与后续的条件判断。

也就是说,为了知道 conn-\>query(sql) === TRUE 这个条件到底是成立还是不成立,计算机必须先执行 conn-\>query(sql) 得到返回值,然后再拿这个返回值去和 TRUE 进行比较,看是否相等。

PHP readfile() 函数

readfile() 函数输出一个文件。

该函数读入一个文件并写入到输出缓冲。

若成功,则返回从文件中读入的字节数。若失败,则返回 false。

代码示例

<?php

echo readfile("test.txt");

?>

不想要返回值直接写readfile("test.txt");就好。

php文件打开,读取,关闭

完整打开读取最后关闭的代码段

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

echo fread($myfile,filesize("webdictionary.txt"));

fclose($myfile);

?>

fopen是PHP之中的打开文件函数。

fopen() 的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式。

这类只介绍该函数的第一个参数,也就是r

r的意思为只读。

or die("Unable to open file!");如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:"Unable to open file!"

其中的die()可以替换为 exit(),die() 函数:它是 exit() 函数的别名,两者有些许区别,但暂时用不上,等用到在学。

fread() 函数读取打开的文件。fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

filesize()函数返回指定文件的大小。

fread()函数就像是一个文件内容的 "小勺子",它能从文件这个 "大容器" 里一勺一勺地舀出内容。

第一个参数就是从哪里挖。第二个参数就是挖多少。

echo fread($myfile,filesize("webdictionary.txt"));就是告诉计算机,从web...文件开始挖掘,一次全拿出来。

fclose() 函数用于关闭打开的文件。

注释:用完文件后把它们全部关闭是一个良好的编程习惯。您并不想打开的文件占用您的服务器资源

在之前的代码之中,虽然输出了,但是格式却是全集在一行上面了,可以使用pre标签来让代码呈现出来的文本与txt格式一致。

echo "<pre>".fread($myfile,filesize("kun.txt"))."</pre>";

fgets() 函数用于从文件读取单行。第一个参数为要读取的文件,第二个参数为每次读取多少字节数。但都是一行的字节数。

<?php

$file = fopen("kun.txt", "r") or exit("无法打开文件!");

echo fgets($file);

fclose($file);

?>

如果fgets($file,10);那么将会只读取第一行的十个字节。

在调用该函数之后,文件指针会移动到下一行。

echo fgets(file);echo fgets(file);两次就输出txt文本之中两行。

feof() 函数是 PHP 中用于检测文件指针是否已到达文件末尾的函数。

在循环遍历未知长度的数据时,feof() 函数很有用。

当文件指针到达文件末尾或者在读取文件过程中发生错误时,feof()函数返回true

实例

<?php

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");

while(!feof($myfile)) {

echo fgets($myfile) . "<br>";

}

fclose($myfile);

?>

fgetc() 函数用于从文件中逐字符地读取文件。

把上述的fgets换成fgetc就好了,但是注意中文字符会乱码,如果想用fgetc实现逐字实现中文可能要恶补一下编码知识了。

相关推荐
zhangjiaofa28 分钟前
Android中的LoadedApk:使用指南与核心代码解析
android
想要入门的程序猿1 小时前
Qt菜单栏、工具栏、状态栏(右键)
开发语言·数据库·qt
键盘上的蚂蚁-1 小时前
Python 语言结合 Flask 框架来实现一个基础的代购商品管理
jvm·数据库·oracle
代码欢乐豆2 小时前
MongoDB的部署和操作
数据库·mongodb
<e^πi+1=0>2 小时前
使用Locust对MongoDB进行负载测试
数据库·mongodb
圆蛤镇程序猿2 小时前
【什么是MVCC?】
java·数据库·oracle
开心邮递员2 小时前
sql server: split 函数;cross apply操作符
数据库·sql
老大白菜2 小时前
PostgreSQL 内置函数
数据库·postgresql
Damon撇嘴笑2 小时前
Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
java·数据库·sql
山林竹笋3 小时前
Java解析PDF数据库设计文档
数据库·pdf