php链接mysql数据库

本文介绍使用PHP面向对象方式连接数据库并解决查询结果中文乱码的问题,提供mysqli_connect及设置字符集的方法。

        php连接数据库有三种方法,刚刚发现通过mysql_connect,mysql_query连接已被废弃,而现在推荐的是通过“面向对象方法”和“PDO方法”连接数据库。

        而我在使用面向对象的方法连接时,查询出来的结果中文无法显示,网上给的大部分解决办法都是针对老式连接方法的解决办法,不过最终还是找到了解决办法。

        大体的连接方法如下:

<?php
header("Content-type: text/html; charset=utf-8");

$mysql_url="localhost";//数据库服务器的地址
$mysql_username="";//数据库用户名的名称
$mysql_password="";//连接数据库的密码
$mysql_database="";//数据库的名字

$db=new mysqli($mysql_url,$mysql_username,$mysql_password,$mysql_database);

if(mysqli_connect_error()){//数据库连接失败时提示
    echo 'Could not connect to database.';
    exit;
}

mysqli_query($db,'set names utf8');//给查询结果设置编码

$result=$db->query("SELECT * FROM yc_brand");//此处sql语句表面不能加单引号或双引号

$all=$result->fetch_all();//获取结果集中的所有数据

var_dump($all);

?>

        其中查询结果是一个对象 $result,因为是对象,所以没法直接打印使用。

        我们可以调用该对象的方法来将其转换为数组等表现形式。

        比较常用的有fetch_row,fetch_array,fetch_all


一、fetch_row()

$row = $result->fetch_row()

此方法得到的$row是一个一维数组,每次只会得到一组“记录”,即:如果你查出来的应该是10组记录,而他每次只会返回给你一组记录。

需要用一个while循环将每次查询出来的一维数组再装到一个一维数组中,形成一个二维数组(如装有10组记录的二维数组)。

这种方法的特点是:查询出来的一维数组内的键名默认为从0开始的数字

$rows = array();//建立一个数组用来装查询结果

while($row = $result->fetch_row()){//只要能查到结果就执行
    $rows[] = $row;//将每次查的结果装到之前定义的数组
}

var_dump($rows);

二、fetch_array()

$row = $result->fetch_array()

此方法总体与fetch_row相同,他们两的不同之处在于,fetch_array()查出来的一维数组中里面每一列有两个键值名,原表的列名会自动成为各个键值名,而也会拥有从0开始自动排序的键值名


三、fetch_all()

$rows = $result ->fetch_all();

此方法得出来得$rows为一个二维数组,其实“就相当于fetch_row方法已经循环完存完一维数组的二维数组$rows”,可以直接打印。

### 使用PHP连接MySQL数据库 连接PHPMySQL数据库通常可以通过两种主要方式实现:使用 `mysqli` 扩展或 `PDO`(PHP Data Objects)。以下是详细说明和代码示例。 #### 通过 `mysqli` 连接 MySQL 数据库 可以使用 `mysqli_connect()` 函数来建立与MySQL数据库的连接。如果连接失败,将终止脚本并输出错误信息[^1]。 ```php <?php $link = mysqli_connect('localhost', 'root', '', 'test_db'); // 替换为实际的数据库名称 if (!$link) { die('无法连接到MySQL: ' . mysqli_connect_error()); } else { echo '连接成功'; } mysqli_close($link); ?> ``` #### 通过 `PDO` 连接 MySQL 数据库 另一种方法是使用PDO对象,它提供了更为灵活和安全的数据库操作方式。PDO支持多种数据库驱动,并且在处理SQL语句时能够有效防止SQL注入攻击[^2]。 ```php <?php $dsn = "mysql:host=localhost;port=3306;dbname=test_db;charset=utf8"; // 替换为实际的数据库名称 $db_user = "root"; $db_password = ""; try { $pdo = new PDO($dsn, $db_user, $db_password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功"; } catch (PDOException $e) { die("无法连接到数据库: " . $e->getMessage()); } ?> ``` #### 设置字符集以避免乱码问题 无论使用哪种方法连接数据库,都应确保设置正确的字符集以避免出现乱码问题。对于 `mysqli`,可以通过执行 `SET NAMES utf8` 查询来设置字符集;而对于 `PDO`,可以在DSN中直接指定字符集[^3]。 ```php <?php // 对于mysqli mysqli_query($link, 'SET NAMES utf8'); // 对于PDO,在DSN中指定 $dsn = "mysql:host=localhost;port=3306;dbname=test_db;charset=utf8"; ?> ``` #### 检查连接状态 在任何情况下,都需要检查是否成功建立了数据库连接。如果不成功,应该给出适当的错误提示以便于调试和解决问题。 #### 关闭数据库连接 完成所有数据库操作后,记得关闭数据库连接以释放资源。对于 `mysqli`,可以调用 `mysqli_close()` 函数;而对于 `PDO`,只需将PDO对象设为null即可。 ```php <?php // 对于mysqli mysqli_close($link); // 对于PDO $pdo = null; ?> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值