2014-07-01 260 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命令或變量的開始。

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