PHP访问Mysql数据库
PHP可以通过mysql接口和mysqli接口访问mysql数据库。需要加入mysql和mysqli接口才能访问mysql数据库。
windows下配置amp:
a、安装apache:
找到\Apache\conf\httpd.conf文件,用记事本打开,找到:Define SRVROOT这一项,将其右方的值改为当前你Apache安装存放的目录地址,如:Define SRVROOT "D:/apache"
接下来需要配置安装Apache的主服务,有了它,Apache才可启动:
打开CMD窗口,输入:"D:\application_software\Apache\bin\httpd.exe" -k install -n apache
切记,包含引号。
在安装目录中,找到D:\application_software\Apache\bin\ApacheMonitor.exe可执行文件,双击运行,桌面右下角会出现图标,双击打开窗口界面。点击左侧start,启动apache服务。
注:若要卸载apache,命令下输入sc delete apache。
配置apache:
1、apache服务器配置文件httpd.conf中修改信息。默认路径为C:\ProgramFiles\Apache Software Foundation\Apache2.2。httpd.conf文件在apache服务器目录下的conf文件夹中。在httpd.conf中加入信息:
loadModule php5_module "C:/php/php5apache2_2.dll" --注:apache中加载php模块
AddType application/x-httpd-php .php .html .htm
PHPIniDir "D:/Web/PHP5.2.17/php.ini" --注:指定php.ini配置文件的目录,添加这句后就不用把php.ini放到C:/windows目录下了。
注: --AddType 是让apache解析.php .html .htm三种文件中的php代码。
2、加载mysql库(php5.3以上版本没有libmysql.dll),可以在httpd.ini中加载php5_module前,添加这句:LoadFile "E:\server\php528\libmysql.dll"或者将php目录下的libmysql.dll文件复制到C:\windows文件夹下。或者可以将php目录添加进环境变量path中。
配置php.ini:
1、将PHP目录下的php.ini-recommended文件改名为php.ini。在php.ini文件中添加下面的信息:
extension_dir="C:/php/ext" --注:指定php扩展目录的位置
extension=php_mysql.dll --开启mysql和mysqli动态链接库
extension=php_mysqli.dll
如果php.ini中有"extension=./",直接将等号后面的值改为上面的路径。如果存在extension=php_mysql.dll和extension=php_mysqli.dll,而且前面有分号,那么将分号去掉即可。php.ini中分号用来表示后面的信息的注释。
2、单击所有程序|apache http server 2.2|control apache server|restart选项重启apache服务器。
3、之后即可在apache服务器安装目录下的htdocs目录下新建test.php文件。该文件中输入:<?php phpinfo(); ?>
php下载地址:http://www.php.net/downloads.php VC11 x86 Non Thread Safe 版本用于iis,VC11 x86 Thread Safe 用于apache
注:phpinfo()显示configuration file (php.ini)path 的值若为C:\windows,这表示配置文件php.ini默认存放位置是C:\windows。loaded configuration file 的值若为C:\windows\php.ini,这表示从该文件中加载php配置文件。
linux下配置php
1、将php-5.2.11.tar.gz复制到/usr/local/src目录下,然后在该目录下解压和安装php。
命令:
cp /home/hih/download/php-5.2.11.tar.gz /usr/local/src/ --将文件复制到/usr/local/src/下
cd /usr/local/src/ --将目录切换到/usr/local/src/下
tar -xzvf php-5.2.11 --解压tar.gz压缩包
cd php-5.2.11 --将目录切换到php-5.2.11下
--设置编译选项 通过--prefix、--with-mysql、--with-mysqli等选项来进行设置
./configure --prefix=/usr/local/php --with-mysql=/usr/local --with-mysqli=/usr/bin/mysql_config
make --开始编译
make install --进行安装
make clean --清除编译结果
注:--prefix:设置安装路径。--with-mysql:php中添加传统的mysql接口。其后面的值是mysql的安装路径;--with-mysqli:php中添加mysqli接口。更多参数可以通过"./confiure --help"来查看。
2、开始配置apache服务器的httpd.conf文件
如果apache服务器安装在/usr/local/apache目录下,那么httpd.conf就应该在/usr/local/apache/conf/目录下。用vi打开httpd.conf,加入下面信息:
loadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
再重启apache服务器:/etc/init.d/httpd restart
测试php是否安装成功可以在/var/www/html/目录下创建test.php文件,如:
<?php phpinfo(); ?>
连接mysql数据库
php可以通过mysql或mysqli接口连接mysql数据库。
1、mysql接口提供mysql_connect()方法来连接mysql数据库,如:
$connection=mysql_connect("host/IP","username","password");
还可以指定登录到哪一个数据库如:
$connection=mysql_connect("host/IP","username","password","database");
2、mysqli接口下有两个比较常用的类,分别是mysqli和mysqli_result。mysqli主要用与mysql数据库建立连接,其中query()方法用来执行sql语句。mysqli_result主要用于处理select语句的查询结果。如:
$connection=new mysqli("host/IP","username","password","database");
注:mysqli接口只支持php5和mysql4.1之后的版本。如果需要兼容老版本的php和mysql数据库就只能选myql接口。mysqli接口提供了更多的函数功能比mysql接口强大。mysqli_connect_errno()函数可以判断php连接mysql数据库时是否出错。如果出错该函数返回true。mysqli_connect_error()函数将返回出错信息。如果连接数据库后,可以通过select_db()函数选择数据库。还可以通过get_client_info()、get_server_info()等函数获取mysql信息。
例:连接数据库
<?php
$connection=new mysqli("localhost","root","huang","test");
if(mysqli_connect_error()){
echo "<p>连接失败:",mysqli_connect_error(),"</p>\n";
exit();
}
else{
echo "<p>连接成功</p>\n";
}
?>
php操作mysql数据库
php可以通过query()函数对数据进行查询、插入、更新和删除等操作。但是query()函数一次只能执行一条sql语句。通过multi_query()函数可以一次执行多个sql语句。语句执行成功query()返回true,否则返回false。并可以通过affected_rows()函数获取发生变化的记录数。
例1:php通过query()函数执行语句
$result=$connection->query("insert into score values(11,908,'法语',88)");
if($result){
echo "<p>insert语句执行成功</p>";
echo "<p>插入的记录数:",$connection->affected_rows,"</p>";//返回插入的记录数
}
else{
echo "<p>insert语句执行失败</p>";
}
例2:
$result=$connection->query("select * from score");//执行select语句
if($result){//$result为空值时执行成功
echo "<p>select 语句执行成功</p>";
echo "<p>查询的记录数:",$result->num_rows,"</p>";//输出查询的记录数
echo "<p>查询的字段数:",$result->field_count,"</p>";//输出查询的字段数
}
else{
echo "<p>select语句执行失败</p>";//$result为空值时执行失败
}
处理查询结果
query()函数成功执行select后会返回一个mysqli_result对象$result。select语句查询结果都存储在$result中。mysqli提供4种方法读取数据:
1)、$rs=$result->fetch_row():以普通数值的形式返回记录,通过$rs[$n]来获取字段的值。$rs[0]表示第一个字段,后面依次类推。
2)、$rs=$result->fetch_array():以关联数组的形式返回记录,可以通过$rs[$n]或者$rs["columnName"]来获取字段的值。例如,第一个字段的字段名为id,可以通过$rs[0]或者$rs["id"]来获取id字段的值。
3)、$rs=$result->fetch_assoc():以关联数组的形式返回记录,但只能通过$rs["columnName"]的方式来获取字段的值。
4)、$rs=$result->fetch_object():以对象的形式返回记录,通过$rs->columnName的方式来获取字段值。例如,通过$rs->id来获取id字段的值。
例1:fetch_row()函数返回select语句的查询结果
$result=$connection->query("select * from score");
while($rs=$result->fetch_row()){
echo "<p>",$rs[0],"\t",$rs[1],"\t",$rs[2],"\t",$rs[3],"</p>";
}
例2:通过fetch_array()函数返回select语句的查询结果,如:
$result=$connection->query("select * from score");
while($rs=$result->fetch_array()){
echo "<p>",$rs["id"],"\t",$rs["stu_id"],"\t",$rs[2],"\t",$rs[3],"</p>";
}
例3:通过fetch_object()函数返回select语句的查询结果,如:
$result=$connection->query("select * from score");
while($rs=$result->fetch_object()){
echo "<p>",$rs->id,"\t",$rs->stu_id,"\t",$rs->c_name,"\t",$rs->grade,"</p>";
}
注:如果希望改变读取记录的顺序可以用data_seek()函数。还可以通过htmlspecialchars()函数将数据库中的特殊字符按HTML标准进行转换。
获取查询结果的字段名
通过fetch_fields()函数获取查询结果的详细信息,该函数返回对象数组。通过该对象数组可以获取字段名、表名等信息。如,$info=$result->fetch_fields()可以产生一个对象数组$info。然后通过$info[$n]->name获取字段名,$info[$n]->table获取表名。
例:fetch_fields()函数获取查询结果的字段名和所在表的名称,如:
$result=$connection->query("select * from score");
$num=$result->field_count;//计算查询的字段数
$info=$result->fetch_fields();//获取记录的字段名、表名等信息
echo "<p>table:",$info[0]->table,"</p>";//输出表名称
for($i=0;$i<$num;$i++){
echo $info[$i]->name,"\t";//输出字段名称
}
一次执行多个sql语句
query()函数一次只能执行一条sql语句,而multi_query()函数可以一次执行多个sql语句。如果第一个sql语句正确执行,那么multi_query()函数返回true,否则返回false。php使用store_result()函数获取multi_query()函数执行查询的记录。一次只能获取一个sql语句的执行结果。可以用next_result()函数判断下一个sql语句的结果是否存在,如存在,next_result()函数返回true,否则,返回false。
例:用multi_query()函数一次性执行两个select语句
$sql="select * from score;select * from student";
$rs=$connection->multi_query($sql);//用multi_query()方法执行select语句
if($rs){
$result=$connection->store_result();//将查询结果赋值给$result
while($row=$result->fetch_object()){ //通过fetch_object()函数取出每条记录的值
echo "<p>",$row->id,"\t",$row->stu_id,"\t",$row->c_name,"\t",$row->grade,"</p>";
}
if($connection->next_result()){//判断是否还有下一个select语句的查询结果
$result=$connection->store_result();//将查询结果赋值给$result
while($row=$result->fetch_object()){
echo "<p>",$row->id,"\t",$row->name,"\t",$row->sex,"\t",$row->birth,"</p>";
}
}
}
注:store_result函数一次读取一个sql语句的所有执行结果,并将结果全部返回到客户端。除了该函数外还可以用use_result()函数来读取执行结果。该函数将读取的结果存储在服务器端,每次只向客户端传送一条记录。
处理带参数的sql语句
php中可以执行带参数的sql语句。带参数的sql语句可以不指定某个字段的值而用问号"?"代替。然后在后面的语句中指定值来替换问号。通过prepare()函数将带参数的sql语句进行处理,如:
$stmt=$mysqli->prepare("insert into table(name1,name2) values(?,?)");
注:在后面的语句为这两个字段设置值。prepare()函数返回一个mysqli_stmt对象,该对象通过bind_param()方法为每个变量设置数据类型,bind_param()方法中使用不同的字母来表示数据类型。如:
a、i表示整数。其中包括int、tinyint、bigint等
b、d表示浮点数。其中包括float、double、decimal等
c、s表示字符串。其中包括char、varchar、text等
d、b表示二进制数据。其中包括blob等。
bind_param()函数中将数据类型与相应变量对应。如:
$stmt->bind_param('idsb',$var1,$var2,$var3,$var4);
注:变量$var1对应字母i,表示整数类型;$var2对应字母d表示浮点数类型。赋值完毕后可以通过execute()方法执行sql语句。如:$stmt->execute();
例:向表插入两条记录,如:
$stmt=$mysqli->prepare("insert into score(id,stu_id,c_name,grade) values(?,?,?,?)");//问号代替具体值
$stmt->bind_param('iisi',$id,$stu_id,$c_name,$grade);//给变量设置数据类型
$id=15;
$stu_id=908;
$c_name="数学";
$grade=85;
$stmt->execute();
$id=16;
$stu_id=909;
$c_name="数学";
$grade=88;
$stmt->execute();//执行insert语句
注:上面的方法不仅可以执行insert语句还可以执行update语句和delete语句。可以通过$stmt->affected_rows属性返回影响的记录数。
关闭创建的对象
1、对mysql数据库访问之后必须关闭创建的对象。连接数据库时创建了$connection对象,处理sql语句的执行结果时创建了$result对象。操作完成后这些对象都必须使用close()方法关闭,形式如:
$result->close();
$connection->close();
2、如果使用了prepare()函数,那么一定会返回mysqli_stmt对象。如果execute()方法执行完后,也可以通过close()方法关闭该对象。如mysqli_stmt对象为$stmt,如:
$stmt->close();
php备份与还原mysql数据库
可以使用system()函数或exec()函数来调用mysqldump命令和mysql命令。用来备份还原。
备份
system()函数的形式如:
system("mysqldump -h hostname -u user -ppassword database [table] > dir/backup.sql");
注:需要将mysql的应用程序的路径添加到系统变量的path变量中。如不添加也可以使用完整路径,如:
system("C:/mysql/bin/mysqldump -h hostname -u user -ppassword database [table] > dir/backup.sql");
另外,linux下要注意权限问题。只有拥有root权限或myql权限的用户才能正确执行这段代码。
还原
<?php
system("mysql -h hostname -u user -ppassword database < C:/test.sql");
?>
注:如果调用mysqldump命令出错,可以先测试system()或exec()函数是否可用,可以:<?php print_r(system("dir"))?>
该语句调用windows系统的dir命令。如果页面输出了文件和文件夹的信息,说明system()可用。;linux系统下可以测试ls命令。再检测mysqldump命令是否启用:<?php print_r(system("mysqldump --help"))?>如果页面不能输出帮助信息,说明mysqldump命令没有添加到系统的环境变量中。可以指定完整路径,或者linux下修改.bashrc文件或修改/etc/profile文件来添加系统的环境变量。
综合实例:
1、用php访问mysql数据库,要求:
通过mysqli接口连接mysql中的test数据库,用multi_query()函数同时执行两个selecct语句,在页面是那个显示查询结果。第一行显示字段名,下面每行显示一条记录,最后关闭所有对象。
<?php
$conn=new mysqli("localhost","root","root","test");
if(mysqli_connect_errno()){
echo "<p>连接失败:",mysqli_connect_error(),"</p>";
exit(); //用exit退出操作
}
else{
echo "<p>连接成功</p>";
$sql="select id,name,department from student;select stu_id,c_name,grade from score";
if($conn->multi_query($sql)){ //判断multi_query函数是否成功执行了第一个select,返回true表示成功。
$result=$conn->store_result();//获取第一个select语句的执行结果
$num=$result->field_count;//获取结果的字段数
$info=$result->fetch_fields();//获取字段的信息
echo "<p>表名为:",$info[0]->table,"</p>";//获取表名称
for($i=0;$i<$num;$i++){ //输出字段名称
echo $info[$i]->name,"\t";
}
while($row=$result->fetch_object()){ //输出字段的值
echo "<p>",$row->id,"\t",$row->name,"\t",$row->department,"</p>";
}
$result->close(); //关闭$result对象
if($conn->next_result()){ //判断是否还有其它记录,true表示还有
$result=$conn->store_result(); //获取下一个sql语句的结果
$num=$result->field_count; //获取字段数
$info=$result->fetch_fields(); //获取字段的信息,并输出字段的名称
echo "<p>表名为:",$info[0]->table,"</p>";//输出表名称
for($i=0;$i<$num;$i++){ //输出字段名称
echo $info[$i]->name,"\t";
}
while($row=$result->fetch_row()){ //输出字段的值
echo "<p>",$row[0],"\t",$row[1],"\t",$row[2],"</p>";
}
$result->close();
}
echo "<p>查询结束,所有结果已经输出</p>";
}
}
$conn->close();
?>
php访问mysql数据库
最新推荐文章于 2021-02-28 21:43:12 发布