You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用mysqli或PDO扩展替换旧版mysql函数完成代码升级

PHP废弃mysql_*系列函数升级方案

核心升级改动点

  • 替换所有mysql_前缀函数为对应mysqli_系列函数或PDO方法,所有数据库操作必须传入连接实例
  • 废弃直接拼接SQL变量的写法,改用预处理参数绑定,解决原有代码的SQL注入安全风险
  • 优化多余的PHP标签嵌套,提升代码可读性

方案1:MySQLi实现(面向过程风格,适配原有代码习惯)

首先替换你项目中原有的数据库连接代码:

// 替换原有mysql_connect、mysql_select_db逻辑
$conn = mysqli_connect('数据库主机地址', '数据库用户名', '数据库密码', '数据库名称');
if (!$conn) {
    die('数据库连接失败: ' . mysqli_connect_error());
}
// 设置编码,和你项目原有编码保持一致即可,这里以utf8为例
mysqli_set_charset($conn, 'utf8');

升级后的业务代码如下:

<?php
$categories = mysqli_query($conn, "SELECT * FROM (SELECT * FROM tubecatget ORDER BY RAND() LIMIT 32) AS `random_pages` ORDER BY catviews DESC");
while($row = mysqli_fetch_array($categories))
{
    $movtitles = $row['cattitle'];
    $id = $row['id'];
    $seo = $row['catseo'];
    // 预处理语句避免SQL注入
    $stmt = mysqli_prepare($conn, "SELECT vidthumb FROM tubevideos WHERE vidcat = ? ORDER BY vidviews DESC, id DESC LIMIT 1");
    // 第二个参数i表示绑定的参数为整数类型,若vidcat为字符串类型请改为s
    mysqli_stmt_bind_param($stmt, "i", $id);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $thumb = mysqli_fetch_array($result);
    $link = $thumb['vidthumb'];
?>
<a title="<?php echo $movtitles; ?>" href="<?php echo $seo; ?>.html">
    <img src="<?php echo $link; ?>" width="240" height="180" alt="<?php echo $seo; ?>" />
    <span><?php echo $movtitles; ?></span>
</a>
<?php } ?>

方案2:PDO实现(支持多数据库适配,通用性更强)

首先替换项目原有的数据库连接代码:

try {
    $pdo = new PDO('mysql:host=数据库主机地址;dbname=数据库名称;charset=utf8', '数据库用户名', '数据库密码');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die('数据库连接失败: ' . $e->getMessage());
}

升级后的业务代码如下:

<?php
$categories = $pdo->query("SELECT * FROM (SELECT * FROM tubecatget ORDER BY RAND() LIMIT 32) AS `random_pages` ORDER BY catviews DESC");
while($row = $categories->fetch(PDO::FETCH_ASSOC))
{
    $movtitles = $row['cattitle'];
    $id = $row['id'];
    $seo = $row['catseo'];
    // 预处理语句避免SQL注入
    $stmt = $pdo->prepare("SELECT vidthumb FROM tubevideos WHERE vidcat = ? ORDER BY vidviews DESC, id DESC LIMIT 1");
    $stmt->execute([$id]);
    $thumb = $stmt->fetch(PDO::FETCH_ASSOC);
    $link = $thumb['vidthumb'];
?>
<a title="<?php echo $movtitles; ?>" href="<?php echo $seo; ?>.html">
    <img src="<?php echo $link; ?>" width="240" height="180" alt="<?php echo $seo; ?>" />
    <span><?php echo $movtitles; ?></span>
</a>
<?php } ?>

提示:如果你的id字段非数字类型,仅需要调整MySQLi方案中mysqli_stmt_bind_param的类型参数即可,PDO无需额外调整。

内容的提问来源于stack exchange,提问作者Serkan Demir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:33:01