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

000webhost部署PHP站点数据库查询失败问题求助

问题诊断与解决方案

嘿,我一眼就看出你的问题根源了:你混用了PDO和mysqli两种完全不兼容的数据库扩展!

你用new PDO()创建了一个PDO连接对象$con,但后面却想用mysqli的mysqli_query()方法去执行查询——这俩根本不是一套API,mysqli_query()认不出PDO的连接对象,自然返回false,导致你看到"failed db access"的提示。

下面给你两种修正方案,选一种全程用就行:

方案1:全程使用PDO(推荐)

PDO是更现代化、支持多数据库的扩展,代码更简洁也更安全,修改后的测试脚本如下:

<?php 
ob_start(); 
session_start(); 
$host = 'localhost'; 
$user = 'xxxxxxx'; 
$pass = 'xxxxxxx'; 
$db = 'xxxxxxx'; 
date_default_timezone_set("Asia/Kolkata");

try {
    // 加上字符编码参数,避免乱码问题
    $con = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass);
    // 设置错误模式为异常,方便直接看到报错信息
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connection success";

    $query = $con->query("SELECT * FROM songs");
    // 获取关联数组格式的结果
    $tb = $query->fetch(PDO::FETCH_ASSOC);
    print_r($tb);
} catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

方案2:全程使用mysqli(面向对象风格)

如果你更习惯mysqli的写法,也可以统一用mysqli的连接方式:

<?php 
ob_start(); 
session_start(); 
$host = 'localhost'; 
$user = 'xxxxxxx'; 
$pass = 'xxxxxxx'; 
$db = 'xxxxxxx'; 
date_default_timezone_set("Asia/Kolkata");

// 创建mysqli连接对象
$con = new mysqli($host, $user, $pass, $db);
// 检查连接是否出错
if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error);
}
echo "Connection success";

$query = $con->query("SELECT * FROM songs");
if($query){
    $tb = $query->fetch_assoc();
    print_r($tb);
} else {
    // 输出具体的查询错误,方便调试
    echo " failed db access. Error: " . $con->error;
}
// 用完记得关闭连接
$con->close();
?>

额外小建议:开发环境下可以开启PHP错误显示,能直接看到具体的报错细节,帮你更快定位问题:

error_reporting(E_ALL);
ini_set('display_errors', 1);

内容的提问来源于stack exchange,提问作者Ayan Banerjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:59