그래서 저는 Windows Server 2008 R2에서 웹 페이지를 구축하고 있으며 인트라넷에서 작동하도록 IIS 7을 구성하여 Active Directory/로컬 네트워크 내의 모든 컴퓨터에서 로컬로 사이트에 액세스할 수 있습니다. 서버가 연결되었는지 알려주기 위해 기본 쿼리를 수행하는 PHP 스크립트를 실행하려고 할 때. 서버 측과 클라이언트 측(내 워크스테이션에서) 모두에서 페이지를 실행하려고 시도했지만 전혀 작동하지 않습니다.
이것은 연결을 설정하는 데 사용하는 코드의 예이지만 "오류: SQLSTATE[HY000] [2002] 대상 컴퓨터가 적극적으로 거부했기 때문에 연결할 수 없습니다."라는 오류가 계속 발생합니다.
보안을 위해 ServerName, UserName, Password 및 DBName 필드가 제거되었습니다. 또한 모든 코드는 !DOCTYPE, HTML 및 Body 내에 포함되어 있습니다.
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "[SERVERNAME]";
$username = "[USERNAME]";
$password = "[PASSWORD]";
$dbname = "[DBNAME]";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, EventID, EventType FROM dbo.Event");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
답변1
고쳤다. ODBC는 최신 버전이 아니며 Windows 2008 R2에는 PHP용 SQL 드라이버가 필요하다는 것이 밝혀졌습니다.