2014-07-01 230 views
1
<?php 
$serverName = "(local)"; //serverName 
$connectionInfo = array("Database"=>"DabaseNew", "UID"=>"sa", "PWD"=>"*****"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 
if($conn==true) { 
    echo "Connection established.<br />"; 
}else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 
$sql = "SELECT * FROM Dbo.DATABASE COMPANY SERVICES$Employee"; 
$stmt = sqlsrv_query($conn, $sql); 
if(!$stmt){ 
    die(print_r(sqlsrv_errors(), true)); 
} 
$rows = sqlsrv_has_rows($stmt); 
while($obj = sqlsrv_fetch_object($stmt)){ 
    echo $obj->Description.", ".$obj->lName."<br />"; 
} 
?> 

我想连接到我的sql服务器使用sqlsrv_connect到PHP。上面的代码在下面给我一个错误;连接PHP到MS SQL服务器

输出: 已建立连接。 Array([0] => Array([0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft] [SQL Server Native Client 11.0] [ SQL Server]'SERVICES'附近语法错误[message] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]'SERVICES'附近的语法不正确。))

+0

'SELECT * FROM Dbo.DATABASE公司服务$ Employee' **那是查询?** – Abdullah

+0

你想要什么,从哪个数据库,其中的条件下选择? – Daniel

+0

@Abdullah我希望看到表 – user3315848

回答

0

您需要转义$字符\$,因为php将它视为第一个字符ov变量。试试这个:

$sql = "SELECT * FROM Dbo.[DATABASE COMPANY SERVICES\$Employee]"; 

编辑:

为了避免escapingg你也可以使用单引号'代替双引号"。然后,PHP不能解析字符串中的变量。 (see this question

$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]'; 

2日编辑:

连接两个字符串使用.操作是这样的:

$foo = "Hello "; 
$bar = $foo."world!"; // gives "Hello world!" 

正如你可以第一个编辑"内联的回答中读双引号解决中间变量,而'单引号不。你的可能的解决方案可能是这样的:

$query = 'SELECT [First Name] AS firstName, [Last Name] AS lastName 
      FROM Dbo.[DATABASE COMPANY SERVICES$Employee] 
      WHERE [Employee Number] = 15 OR [E-Mail] = \''.mssql_escape($mail).'\''; 

但是你永远不应该直接发送一个GET参数顶部你的SQL服务器。任何人都可能渗透你的数据库甚至删除它。因此,您应该添加一个转义函数,如this one或考虑使用另一个像PDO的数据库并构建参数化查询。它可能我足够的躲避变量中单引号,像这样的另一个单引号:

function mssql_escape($str) { 
    return str_replace("'", "''", $str); 
} 
+0

仍然无效 – user3315848

+0

我添加了另一种可能的解决方案(编辑) – Daniel

+0

Array([0] => Array([0] => 42S02 [SQLSTATE] => 42S02 [1] => 208 [code] => 208 [2] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效的对象名称'dbo.DATABASE COMPANY SERVICES $ Employee'。[message] => [Microsoft]名称'dbo.DATABASE公司服务$员工'。)) – user3315848

1

如果表名中有空格应该像这样运行查询: $ sql =“SELECT * FROM dbo。[DATABASE COMPANY SERVICES]”; 不知道你想用$ employee来做什么,因为PHP把它看作一个变量,并试图粘贴它填充它(我认为这里的$ employee是NULL)。

+0

如果然而$员工是你想从数据库中获得的员工的名字,你应该使用$ sql =“SELECT * FROM dbo。[DATABASE COMPANY SERVICES] WHERE [Last Name] ='$ employee'“; – Gerdinand

1

尝试切换

$sql = "SELECT * FROM Dbo.DATABASE COMPANY SERVICES$Employee"; 

$sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee]'; 

因为PHP认为$员工是如果您使用双引号则变量。 []用于告诉数据库表名是DATABASE COMPANY SERVICES$Employee,否则该空间将指示另一个sql命令或变量的开始。

尽量不要在表名称中使用空格,避免混淆。