1. 前置知识点回顾
PHP工作原理:
(1). PHP的代码传递给PHP包, 请求PHP进行解析并编译.
(2). 服务器根据PHP代码的请求读取数据库.
(3). 服务器与PHP包共同根据数据库中的数据和其他运行变量, 将PHP代码解析成普通的HTML代码.
(4). 解析后的代码发送个浏览器, 浏览器对代码进行分析获取可视化内容.
(5). 用户通过浏览器浏览网站的内容.
2. PHP操作数据库的基本步骤(按顺序)
(1). 建立连接: $connection = mysqli_connect(\'host\', \'username\', \'password\', \'databases_name\', port......);
(2). 判断连接是否成功: mysqli_connect_error()-----连接成功返回0, 失败返回1
(3). 选择数据库: mysqli_select_db($connection, \'another_database_name\')
(4). 设置字符集: mysql_set_charset($connection, \'utf8\');
(5). 书写SQL语句: $sql = "select * from db_name"; $result = mysqli_query($connection, $sql);.........
(6). 执行SQL语句: mysqli_query();
(7). 解析结果集: mysqli_fetch_array($result, resulttype::MYSQLI_ASSOC);
其中: MYSQLI_ASSOC代表以关联数组编号, MYSQLI_NUM代表以索引数组编号
mysqli_fetch_assoc(), mysqli_fetch_all();
(8). 关闭连接: mysqli_close($connection);
例如:
<?php //建立连接 $connection = mysqli_connect(\'localhost\', \'root\', \'root\', \'test\', 3306); // var_dump($connection); //判断连接是否成功 if( !mysqli_connect_error() ){ echo \'连接成功!\'.\'</br>\'; }else{ die(mysqli_connect_error()); } //(更换)选择数据库 mysqli_select_db($connection, \'mrsoft\'); //设置字符集 mysqli_set_charset($connection, \'utf8\'); //操作数据库 $sql = "select * from `books`"; $result = mysqli_query($connection, $sql); var_dump($result); $array = mysqli_fetch_array($result, MYSQLI_ASSOC); var_dump($array); //关闭连接 mysqli_close($connection); //var_dump($connection); ?>
说明: 如果在多个网页中都要进行频繁的数据库访问, 则可以建立与数据库服务器的持续连接来提高效率.
持续连接的方法: mysqli_pconnect()代替mysqli_connect(), 系统自动返回已经建立好的持续连接的ID号.
3. 添加, 更新, 删除数据
<?php //连接数据库 $connect = mysqli_connect(\'localhost\', \'root\', \'root\', \'test\', 3306); //测试连接是否成功 if( mysqli_connect_error() ){ die(\'连接失败, 原因: \'. mysqli_connect_error()); } //连接成功 //选择数据库 mysqli_select_db($connect, \'test\'); //设置字符集 mysqli_set_charset($connect, \'utf8\'); //书写SQL语句 $sql_insert =\'INSERT INTO user1(username, age, sex, addr, married, salary) VALUES("周星星", 28, "男", "香港", 0, 9999999)\'; $sql_update = \'UPDATE user1 SET username="张三丰" WHERE id=5\'; $sql_delete = \'DELETE FROM user1 WHERE id=4\'; //执行SQL语句 $result_insert = mysqli_query($connect, $sql_insert); $result_update = mysqli_query($connect, $sql_update); $result_delete = mysqli_query($connect, $sql_delete); //解析SQL语句执行结果 if($result_insert){ echo \'执行成功!\' . mysqli_affected_rows($connect) . \'条数据, 刚才插入的数据的ID是\' . mysqli_insert_id($connect); }else{ echo \'执行失败!\'; } if($result_update){ echo \'执行成功!\' .\'更新了\' .mysqli_affected_rows($connect) . \'条数据.\'; }else{ echo \'执行失败!\'; } if($result_delete){ echo \'执行成功! 成功删除了\'.mysqli_affected_rows($connect) . \'条数据.\'; }else{ echo \'执行失败!\'; } //关闭连接, 释放资源. mysqli_close($connect); ?>
4. 简单的查询与结果解析
<?php //连接数据库 $link = mysqli_connect(\'localhost\', \'root\', \'root\'); //测试连接是否成功 if( mysqli_connect_error()){ die( \'连接失败! 原因: \'. mysqli_connect_error()); } //连接成功 //选择数据库test mysqli_select_db($link, \'test\'); //设置字符集 mysqli_set_charset($link, \'utf8\'); //书写SQL语句 $sql1 = \'SELECT * FROM user1\'; $sql2 = \'SELECT * FROM user1 WHERE id<8\'; //执行SQL语句 $result = mysqli_query($link, $sql2); //解析结果 if($result){ // echo \'执行成功! \'; echo \'<pre>\'; // $data = mysqli_fetch_array($result, MYSQLI_ASSOC); // var_dump($data); while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ var_dump($row); } }else{ echo \'执行失败! \'; } ?>
结果:
array(8) {
["id"]=>
string(1) "5"
["username"]=>
string(9) "张三丰"
["age"]=>
string(2) "38"
["sex"]=>
string(3) "男"
["addr"]=>
string(6) "上海"
["married"]=>
string(1) "0"
["salary"]=>
string(8) "15000.00"
["userDesc"]=>
string(16) "user description"
}
array(8) {
["id"]=>
string(1) "6"
["username"]=>
string(9) "张子怡"
["age"]=>
string(2) "39"
["sex"]=>
string(3) "女"
["addr"]=>
string(6) "北京"
["married"]=>
string(1) "1"
["salary"]=>
string(8) "85000.00"
["userDesc"]=>
string(16) "user description"
}
array(8) {
["id"]=>
string(1) "7"
["username"]=>
string(6) "汪峰"
["age"]=>
string(2) "42"
["sex"]=>
string(3) "男"
["addr"]=>
string(6) "深圳"
["married"]=>
string(1) "1"
["salary"]=>
string(8) "95000.00"
["userDesc"]=>
string(16) "user description"
}
5. 复杂查询与结果解析
<?php //连接数据库 $link = mysqli_connect(\'localhost\', \'root\', \'root\'); //测试连接是否成功 if( mysqli_connect_error() ){ die( \'连接失败! 原因: \'.mysqli_connect_error()); } //连接成功 //选择数据库 mysqli_select_db($link, \'test\'); //设置字符集 mysqli_set_charset($link, \'utf8\'); //书写SQL语句 $sql = \'SELECT * FROM user1 WHERE id<12 AND id>8\'; //执行SQL语句 $result = mysqli_query($link, $sql); //解析SQL语句执行结果 if($result) { echo \'<pre>\'; echo \'<table border="1px">\'; echo \'<tr>\'; echo \'<th>id</th>\'; echo \'<th>username</th>\'; echo \'<th>age</th>\'; echo \'<th>sex</th>\'; echo \'<th>addr</th>\'; echo \'<th>married</th>\'; echo \'<th>salary</th>\'; echo \'<th>userdesc</th>\'; echo \'</tr>\'; while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ echo \'<tr>\'; echo "<td width=\'100px\'>{$row[\'id\']}</td>"; echo "<td width=\'100px\'>{$row[\'username\']}</td>"; echo "<td width=\'100px\'>{$row[\'age\']}</td>"; echo "<td width=\'100px\'>{$row[\'sex\']}</td>"; echo "<td width=\'100px\'>{$row[\'addr\']}</td>"; echo "<td width=\'100px\'>{$row[\'married\']}</td>"; echo "<td width=\'100px\'>{$row[\'salary\']}</td>"; echo "<td width=\'100px\'>{$row[\'userDesc\']}</td>"; echo \'</tr>\'; } echo \'</table>\'; } //关闭连接 mysqli_close($link); ?>
结果:
6. 程序错误排查
(1)可能的错误原因:
SQL语句语法错误, 数据类型错误, 唯一索引列数据错误......
(2)程序错误排查:
判断SQL语句的执行结果, 查看数据影响条数, 获取SQL语句执行的错误信息[ 调用mysqli_error($link), mysqli_errorno($link) ]