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
相关产品推荐
相关产品推荐

