总结PHP中操作MySQL的相关方法与命令。
PHP连接MySQL
PHP连接MySQL服务器
mysqli_connect()
描述:连接到MySQL服务器
语法:
$link = mysqli_connect([host],[username],[password],[dbName],[port])
返回值:连接成功,则返回MySQLi连接对象。如果失败,则返回FALSE。
@运算符
- PHP支持错误抑制运算符@。
- 可以把它放在变量,函数、include调用和变量等前面。
在连接数据库失败的时候,往往系统给出提示信息,会暴露电脑的相关配置,可能发生信息的不安全泄露,造成隐患。我们可以使用错误抑制符@来避免数据库连接失败的错误提示。
用法:
1 | $link = @ mysqli_connect([host],[username],[password],[dbName],[port]); |
die()和exit()
- 输出一个消息并且退出当前脚本,作用等同。
1 | $db_host = "localhost";//主机号 |
mysqli_connect_error()
- 返回连接失败的错误信息。
mysqli_close()
- 关闭先前打开的数据库连接
- 语法:
bool mysqli_close(mysqli $link);
选择当前数据库
一个数据库服务器包含很多的数据库,通常需要针对某个具体的数据库操作。
语法:bool mysqli_select_db(mysqli $link,string $database)
1 | if(!mysqli_select_db($link,$database)){ |
设置客户端字符集
设置默认字符编码
语法:bool mysqli_set_charset(mysqli $link,string $ charset)
执行SQL语句
mysqli_query()
- 发送一条MySQL查询
- 语法:
resource mysqli_query(mysqli $link,string $query)
- $query是查询的sql语句字符串
说明:mysqli_query()仅对SELECT,SHOW 或 DESCRIBE 语句返回一个mysqli_result结果集对象,如果查询不正确返回FALSE。对于其他类型的SQL语句,成功返回TRUE,失败返回FALSE。非FALSE的返回值意味着查询是合法的并能够被服务器执行。
注意:查询字符串不应以分号结束,和命令行模式下有区别。
mysqli_result结果集对象:结果已经查到,但必须用特殊的方法才能取出数据。
mysqli_free_result()
- 释放与结果集相关联的内存
- 语法:
void mysqli_free_result(mysqli_result $result)
注意:是结果集对象mysqli_result,而不是bool。
从结果集获取数据
mysqli_fetch_row()
从结果集中取出一行作为枚举数组(下标为整型的是枚举数组,下标为字符串的是关联数组)
array mysqli_fetch_row(mysqli_result $result)
每调用一次,取出当前行,并把指针指向下一行,下次调用便是下一行的数据。
1 | while($arr = mysqli_fetch_row($result)){ |
mysqli_fetch_assoc()
从结果集中取出一行作为关联数组
语法:
array mysqli_fetch_assoc(mysqli_result $result)
从结果集取得的行生成的关联数组,如果没有更多行则返回FALSE。
注意:此函数返回的字段名大小写敏感。
mysqli_fetch_array()
从结果集中取出一行作为关联数组或数字数组,或二者兼有。
语法:
array mysqli_fetch_array(mysqli_result $result [,int $result_type = MYSQLI_BOTH])
$result_type是一个常量,取值:MYSQLI_BOTH (二者兼有,默认),MYSQLI_ASSOC (关联索引),MYSQLI_NUM(数字索引)
从结果集取得的行生成的数组,如果没有更多行则返回FALSE。
注意:此函数返回的字段名大小写敏感。
二者兼有举例(一份数据在数组中存两遍,一遍枚举数组,一遍关联数组):
mysqli_fetch_all()
从结果集中取出所有行作为关联数组、枚举数组或二者兼有。
语法:mixed mysqli_fetch_all(mysqli_result $result [,int $result_type = MYSQLI_NUM])
与之前不同的是,默认为枚举数组;即第一维永远为数字,表示第几条记录,第二维字段可以改变,数字、字符串或二者兼有。
mysqli_error()
显示执行sql语句失败的错误信息
语法:
mysqli_error(mysqli $link)
1 | $sql = "insert into test(id,name,age) values(null,'李四',25)"; |
获取记录数
mysqli_num_rows()
取得结果集中行的数目
语法:int mysqli_num_rows(mysqli_result $result)
注意:此命令仅对SELECT语句有效。
mysqli_affected_rows()
取得前一次MySQL操作所影响的记录行数,包括SELECT,UPDATE,INSERT或DELETE。
语法:int mysqli_affected_rows(mysqli $link)
注意:如果最近一次查询失败,函数返回-1。当使用UPDATE查询,MySQL不会将原值和新值一样的值更新,即此条记录不代表被修改。返回值不一定就是查询条件所符合的记录,只有修改过的记录数才会被返回。
案例演示注意事项
1、首先是表单的提交,在php中判断是否提交表单,可以在表单中设置隐藏域,值为一个随机值,判断这个随机且唯一的值是否正确即可判断表单是否提交,该方法可避免其他人提交表单修改自己数据库的不安全情况。
2、然后是复选框的提交,复选框提交时会出现覆盖现象,此时在name属性后添加[]
来表明该属性为数组属性。
PHP会把name="hobby[]"
看成添加一个数组元素,而HTML会把它看成一个字符串。
提示:将多个爱好连成一个值,并写入到数据库某个字段中,只需要一个字段来存储爱好,用到字符串的拼接。