我有2台服务器连接到同一网络。其中之一是Fedora Web服务器,其中包含网页和表单。另一个是包含SQL Server 2012的Windows Server 2008 R2。
我将sqlsrv扩展名安装到Web服务器中,以将表单连接到Windows Server上的数据库。
我已经按照Microsoft教程进行了操作,但是仍然无法使用。当我尝试输入表单时,发生了一些错误。
在phpinfo中出现sqlsrv和pdo_sqlsrv。因此,我尝试在不同的文件中使用不同的代码,但是它们都给出了不同的错误。
testpdo.php
<?php
$serverName = "192.168.9.10:1433";
$database = "logytel";
$uid = 'sa';
$pwd = 'pass';
try {
$conn = new PDO(
"odbc:mssql=$serverName;Database=$database",
$uid,
$pwd,
array(
//PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
}
catch(PDOException $e) {
die("Error connecting to SQL Server: " . $e->getMessage());
}
echo "<p>Connected to SQL Server</p>\n";
echo "<p>PDO::ATTR_PERSISTENT value:</p>\n";
echo "<pre>";
echo var_export($conn->getAttribute(PDO::ATTR_PERSISTENT), true);
echo "</pre>";
echo "<p>PDO::ATTR_DRIVER_NAME value:</p>\n";
echo "<pre>";
echo var_export($conn->getAttribute(PDO::ATTR_DRIVER_NAME), true);
echo "</pre>";
echo "<p>PDO::ATTR_CLIENT_VERSION value:</p>\n";
echo "<pre>";
echo var_export($conn->getAttribute(PDO::ATTR_CLIENT_VERSION), true);
echo "</pre>";
$query = 'select top 5 * from tbl_users';
$stmt = $conn->query( $query );
echo "<pre>";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
print_r($row);
}
echo "</pre>";
// Free statement and connection resources.
$stmt = null;
$conn = null;
?>
尝试连接到它时会发生此错误
连接到SQL Server时出错:找不到驱动程序
testsql.php
<?php
function FormatErrors( $errors )
{
/* Display errors. */
echo "Error information: <br/>";
if(!$errors || is_array($errors) ) {
return ;
}
foreach ( $errors as $error );
{
echo "SQLSTATE: ".$error['SQLSTATE']."<br/>";
echo "Code: ".$error['code']."<br/>";
echo "Message: ".$error['message']."<br/>";
}
}
$q = isset($_GET['q'])? intval($_GET['q']) : 0;
$serverName = "192.168.9.10:1433";
$conInfo = array ( "Database"=>"logytel", "UID"=>"sa", "PWD"=>"pass");
$con = sqlsrv_connect($serverName, $conInfo);
if ($con) {
echo "Conexión establecida.<br>";
}else{
echo "La conexión no se pudo establecer.<br>";
die( print_r(sqlsrv_errors(), true));
}
sqlsrv_select_db($con,"ajax_demo");
$sql="SELECT * FROM prueba1 WHERE codigo = '".$q."'";
$getResults= sqlsrv_query($con, $sql);
if ($getResults == FALSE) {
die(FormatErrors(sqlsrv_errors()));
}
$cantidad_encontrado = sqlsrv_num_rows($getResults);
if ($cantidad_encontrado > 0) {
// solo se pone los ; (punto y comas) al finalizar la sentencias, no entre lineas de tu echo.
echo "<table>
<tr>
<th>Código</th>
<th>Nombre</th>
<th>Apellidos</th>
<th>Proyecto</th>
</tr>"; //<- aqui termina la sentencia, lo que esta arriba es solo texto plano que el compilador interpreta como STRING y no como sentencia
while($row = sqlsrv_fetch_array($getResults)) {
echo "<tr>"; // en cada uno de estos puntos, debes de colocar el ;
echo "<td>" . $row['codigo'] . "</td>";
echo "<td>" . $row['nombre'] . "</td>";
echo "<td>" . $row['apellidos'] . "</td>";
echo "<td>" . $row['proyecto'] . "</td>";
echo "</tr>";
}
echo "</table>";
sqlsrv_free_stmt($getResults);
sqlsrv_close($con);
}else{
echo "<h1>NO ENCONTRE DATOS </h1>";
}
?>
<!DOCTYPE html>
<html>
<head>
<script>
function showUser(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Luis</option>
<option value="2">Nora</option>
<option value="3">Aron</option>
</select>
</form>
<br>
<div id="txtHint"><b>Selecciona tu nombre</b></div>
</body>
</html>
发生此错误
没有视线的东西。数组([0] =>数组([0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [code] => 0 [2] => [Microsoft] [ODBC SQL Server驱动程序17]登录超时已过期[消息] => [Microsoft] [SQL Server的ODBC驱动程序17]登录超时已过期)[1] =>数组([0] => 08001 [SQLSTATE] => 08001 [1] => 87 [代码] => 87 [2] => [Microsoft] [SQL Server的ODBC驱动程序17] MAX_PROVS:连接字符串不是有效[87]。[消息] => [Microsoft] [ODBC Driver 17 for [SQL Server] MAX_PROVS:连接字符串无效[87]。 )[2] => 数组([0] => 08001 [SQLSTATE] => 08001 [1] => 87 [code] => 87 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序17]与网络相关或 建立连接时发生特定于实例的错误 到SQL Server。找不到服务器或无法访问服务器。检查是否 实例名称正确,并且SQL Server是否配置为允许 远程连接。有关更多信息,请参见SQL Server联机丛书。 [消息] => [Microsoft] [SQL Server的ODBC驱动程序17] A 与网络相关或特定于实例的错误发生在 建立与SQL Server的连接。找不到服务器 无障碍。检查实例名称是否正确以及SQL Server是否正确 配置为允许远程连接。有关更多信息,请参见SQL。 服务器联机丛书。 )
conect.php
<?php
$serverName = "192.168.9.10\mssqlserver, 1433"; //serverName\instanceName, portNumber
$connectionInfo = array( "Database"=>"logytel", "UID"=>"sa", "PWD"=>"pass");
$conn = sqlsrv_connect( $serverName, $connectionInfo); var_dump($conn);
if( $conn ) {
echo "Conexión establecida.<br />";
}else{
echo "Conexión no se pudo establecer.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
找不到驱动程序
conect1
<?php
$SqlServer = "192.168.9.10:1433\MSSQLSERVER";
$SqlServerCon = new PDO("odbc:mssql=$SqlServer;Database=logytel", "sa", "pass");
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";}
?>
致命错误:未捕获的PDOException:在以下位置找不到驱动程序 /var/www/html/conexion1.php:4堆栈跟踪:#0 /var/www/html/conexion1.php(4):PDO-> __ construct('odbc:mssql = 192 ....', 'sa','pass')#1 {main}在/var/www/html/conexion1.php中抛出 4
conect2.php
<?php
$SqlServer = "192.168.9.10:1433\MSSQLSERVER";
$DbConnInfo = array( "Database"=>"logytel", "UID"=>"sa", "PWD"=>"pass");
$SqlServerCon = sqlsrv_connect( $SqlServer, $DbConnInfo);
if( $SqlServerCon ) {echo "Connection established";}
else
{echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));}
?>
无法建立连接。数组([0] =>数组([0] => HYT00 [SQLSTATE] => HYT00 [1] => 0 [代码] => 0 [2] => [Microsoft] [ODBC SQL Server驱动程序17]登录超时已过期[消息] => [Microsoft] [SQL Server的ODBC驱动程序17]登录超时已过期)[1] =>数组([0] => 08001 [SQLSTATE] => 08001 [1] => 87 [代码] => 87 [2] => [Microsoft] [SQL Server的ODBC驱动程序17] MAX_PROVS:连接字符串不是有效[87]。[消息] => [Microsoft] [ODBC Driver 17 for [SQL Server] MAX_PROVS:连接字符串无效[87]。 )[2] => 数组([0] => 08001 [SQLSTATE] => 08001 [1] => 87 [code] => 87 [2] => [Microsoft] [用于SQL Server的ODBC驱动程序17]与网络相关或 建立连接时发生特定于实例的错误 到SQL Server。找不到服务器或无法访问服务器。检查是否 实例名称正确,并且SQL Server是否配置为允许 远程连接。有关更多信息,请参见SQL Server联机丛书。 [消息] => [Microsoft] [SQL Server的ODBC驱动程序17] A 与网络相关或特定于实例的错误发生在 建立与SQL Server的连接。找不到服务器 无障碍。检查实例名称是否正确以及SQL Server是否正确 配置为允许远程连接。有关更多信息,请参见SQL。 服务器联机丛书。 )
最后一个似乎连接了,但没有显示任何内容。 try.php
<?php
$serverName = "192.168.9.10\mssqlserver, 1433"; //serverName\instanceName, portNumber (por defecto es 1433)
$connectionInfo = array( "Database"=>"logytel", "UID"=>"sa", "PWD"=>"pass");
$conn = sqlsrv_connect( $serverName, $connectionInfo); var_dump($conn);
if( $conn ) {
echo "Conexión establecida.<br />";
}else{
echo "Conexión no se pudo establecer.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
资源类型(SQL Server连接)Conexiónestablecida。
当我使用telnet 192.168.9.10
访问时,出现连接被拒绝,但是在SQL Server中端口是开放的,存在防火墙例外,我使用了用户 SA 用于远程连接。
我不知道该怎么办,我需要连接两个服务器。我卸载了所有内容,然后重新安装了所有内容,例如3次,但没有解决问题。我尝试了其他方法来执行此操作,我尝试了FreeTDS,但实际上也不知道如何使用它。除了我之前提到的安装以外,它没有给我安装任何错误。
我没有创建或编辑任何文件吗?我在做什么错了?