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

使用sqlsrv_connect连接SQL数据库时出现Array错误求助

问题分析与解决

1. 核心错误:用错了数据库连接扩展

你用sqlsrv_connect()是微软SQL Server专属的连接函数,但phpMyAdmin管理的是MySQL/MariaDB数据库,两者完全不兼容,这才是连接失败的根本原因。

2. 正确的数据库连接方式

XAMPP默认已经启用了MySQLi和PDO_MySQL扩展,直接用这两个就行,以下是两种可行的连接代码:

方法一:MySQLi 面向过程写法

<html>
<head>
<meta http-equiv="refresh" content="2">
</head>
<body>
<?php
// XAMPP默认MySQL用户名是root,密码为空(如果安装时设置了密码就填你的密码)
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "chat";

// 创建连接
$link = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接
if (!$link) {
    // 用mysqli_error获取字符串格式的错误信息,避免数组转字符串警告
    die('Could not connect: ' . mysqli_error($link));
} else {
    echo "数据库连接成功";
}
?>
</body>
</html>

方法二:PDO 写法(更推荐,支持多种数据库)

<html>
<head>
<meta http-equiv="refresh" content="2">
</head>
<body>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "chat";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置PDO错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "数据库连接成功";
} catch(PDOException $e) {
    die('Could not connect: ' . $e->getMessage());
}
?>
</body>
</html>

3. 原错误里的数组转字符串警告原因

sqlsrv_errors()返回的是数组格式的错误信息,你直接把它和字符串'Could not connect: '拼接,PHP就会抛出数组转字符串的警告。不过这个问题是因为用错了扩展导致的,换用MySQL的扩展后就不会出现了。

4. 实现表数据读写的简单示例

假设你已经在chat数据库里创建了名为messages的表(字段比如id、content、send_time),以下是读写示例:

读取聊天记录(MySQLi)

// 连接成功后执行查询
$sql = "SELECT content, send_time FROM messages ORDER BY send_time DESC";
$result = mysqli_query($link, $sql);

if (mysqli_num_rows($result) > 0) {
    // 输出每条记录
    while($row = mysqli_fetch_assoc($result)) {
        echo "<p>" . $row["send_time"] . ": " . $row["content"] . "</p>";
    }
} else {
    echo "暂无聊天记录";
}

插入新消息(MySQLi)

// 假设表单提交的消息内容是$_POST['message']
$message = mysqli_real_escape_string($link, $_POST['message']); // 防止SQL注入
$send_time = date('Y-m-d H:i:s');

$sql = "INSERT INTO messages (content, send_time) VALUES ('$message', '$send_time')";
if (mysqli_query($link, $sql)) {
    echo "消息发送成功";
} else {
    echo "发送失败: " . mysqli_error($link);
}

内容的提问来源于stack exchange,提问作者Jack Stenander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:02:41