php訪问mysql数据库

时间:2023-03-09 00:31:06
php訪问mysql数据库
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、apacheserver配置文件httpd.conf中改动信息。默认路径为C:\ProgramFiles\Apache Software Foundation\Apache2.2。 httpd.conf文件在apacheserver文件夹下的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选项重新启动apacheserver。
3、之后就可以在apacheserver安装文件夹下的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、開始配置apacheserver的httpd.conf文件
假设apacheserver安装在/usr/local/apache文件夹下,那么httpd.conf就应该在/usr/local/apache/conf/文件夹下。 用vi打开httpd.conf,加入以下信息:
loadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
再重新启动apacheserver:/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语句的全部运行结果,并将结果全部返回到client。除了该函数外还能够用use_result()函数来读取运行结果。该函数将读取的结果存储在server端。每次仅仅向client传送一条记录。 处理带參数的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();
?>