Maison >développement back-end >tutoriel php >PHP链接MySQL的常用扩展函数,php链接mysql_PHP教程
一、PHP连接数据库及基本操作
MySQL采用的是'客户机/服务器'架构。使用PHP安装的MySQL扩展函数,和直接使用客户端软件区访问MySQL数据库服务器,原理一样,都需要向MySQL管理系统发送SQL命令,然后将结果返回给用户。
在PHP中,SQL分为两类(查看SQL语句分类):一是有返回结果集的DQL语句,如select/desc 表名,执行完毕之后,需要PHP处理结果集;二是没有结果集的,如DML、DDL等,但是DML语句执行成功后对数据表的记录有影响。
//连接数据库,常用参数是主机名、用户名和密码<br>$link = mysql_connect('localhost','root','123456');<br>//判断是否连接成功<br>if(!$link)<br>{<br>die('连接失败'.mysql.error()); //连接成功返回资源标识符,失败返回false,mysql_error显示错误信息<br>}<br><br>//选择数据库,mysql_error()只在调试中使用,再部署项目时就不要了,不然会泄露数据库信息<br>mysql_select_db('test') or die('选择数据库失败'.mysql_error());<br><br>//mysql_query()可以设置字符集和执行SQL语句<br>mysql_query('set names utf-8');<br>$sql = 'insert into test(id,name) values("1","dwqs")';<br>$result = mysql_query($sql); //执行sql返回结果集<br><br>//处理结果集,insert属于DML,会对表的记录有影响<br>if($result && mysql_affected_rows() > 0)<br>{<br>//mysql_insert_id()返回最后一条新纪录的auto_increment值<br>echo '插入数据成功'.mysql_insert_id().'<br>';<br>}<br>else<br>{<br>echo '插入数据失败,错误号:'.mysql_errno().'错误信息:'.mysql_error().'<br>';<br>}<br><br>//关闭连接<br>mysql_close($link);<br>?>
二、PHP处理select查询结果集
在PHP中执行select语句返回一个结果集,可以用于对各个字段的处理
$result = mysql_query('select * from test');<br>//获取记录行的个数<br>$rows = mysql_num_rows($result);<br>//获取字段个数,即数据列<br>$cols = mysql_num_fields($result);
如果需要访问结果集中的数据,可以使用下列四个函数中的一个(均以结果集资源符作为参数,并自动返回下一条记录,在表末尾时返回false)
1、mysql_fetch_row():该函数将一条结果记录返回并以一个普通的索引数据保存
2、mysql_fetch_assoc():从结果集中取得一行作为关联数据保存
3、mysql_fetch_array():从结果集中取得一行作为关联数组,或数字数组,或二者兼有。可以使用MYSQL_ASSOC(关联数组形式)、MYSQL_NUM(索引数组形式)和MYSQL_BOTH作为第二个参数,指定返回的数据形态。
4、mysql_fetch_object():从结果集中取得一行作为对象,各个字段以对象方式访问。
建议:没有特殊要求,不要使用mysql_fetch_array(),可以使用mysql_fetch_row()或者mysql_fetch_assoc()实现同样的功能,且效率高。
另外也有三个与结果集相关的常用函数
5、mysql_data_seek(int $num):移动内部结果的指针,$num是想要设定的新的结果集指针的行数。
6、mysql_fetch_lengths(resource <font face="NSimsun">$result</font>
):取得结果集中每个输出的长度
7、mysql_result(resource <font face="NSimsun">$result</font>
, int <font face="NSimsun">$row[,mixed $field]</font>
):返回 MySQL 结果集中一个单元的内容。字段参数可以是字段的偏移量或者字段名,或者是字段表点字段名(tablename.fieldname)。如果给列起了别名('select foo as bar from…'),则用别名替代列名。调用 mysql_result()不能和其它处理结果集的函数混合调用。
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。
返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
mysql_fetch_array(data,array_type)
参数data:可选。规定规定要使用的数据指针。该数据指针是 mysql_query() 函数产生的结果。
参数:array_type可选。规定返回哪种结果。该参数可选值:MYSQL_ASSOC - 关联数组
MYSQL_NUM - 数字数组
MYSQL_BOTH - 默认。同时产生关联和数字数组 。
注释:mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
例子:
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db("test_db",$con);
$sql = "SELECT * from Person WHERE Lastname='Adams'";
$result = mysql_query($sql,$con);
print_r(mysql_fetch_array($result));
mysql_close($con);
?>
输出类似:
Array
(
[0] => Adams
[LastName] => Adams
[1] => John
[FirstName] => John
[2] => London
[City] => London
)
///////////////////////
mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组。
返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。
mysql_fetch_assoc(data)
参数:data(必需)要使用的数据指针。该数据指针是从 mysql_query() 返回的结果。
注释:mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它仅仅返回关联数组。这也是 mysql_fetch_array() 初始的工作方式。
提示:如果在关联索引之外还需要数字索引,用 mysql_fetch_array()。
注意:本函数返回的字段名是区分大小写的。
例子如下:
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('Could not connect: ' . mysq......余下全文>>
由于没有看到完整的代码,仅就看到的代码试作解答如下:
1. Notice: Undefined variable: db in C:\xampp\htdocs\shop\files\mysql.php on line 5
警告:未字义的变量db(第5行不太清楚是哪行代码)。
这个错误提示,从已知的代码来看,其原因应该是你在函数体里引用了一个函数体外定义的变量(db),从代码看其实就是没有注意到, 对于变量 作用域范围(全局、局部)错误应用的问题。
简单的说,函数 select_mycx 里找不到 db。
解决办法:
(1). 用参数传递进去。
function select_mycx($table,$by,$select_str,$number,$db)
{
.....
}
(2). 在参数体里定义全局变量引用:
function select_mycx($table,$by,$select_str,$number)
{
global $db;
....
}
2.Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\shop\files\mysql.php on line 5
这个错误实际上是上面的错误引起的,因为$db没有正确引入,所以再 query 当然不能正确执行。