簡體   English   中英

將PHP連接到MS SQL Server

[英]Connecting PHP to MS SQL Server

<?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 />";
}
?>

我正在嘗試使用sqlsrv_connect將php連接到我的sql服務器。 上面的代碼在下面給了我一個錯誤;

輸出:建立連接。 數組([0] =>數組([0] => 42000 [SQLSTATE] => 42000 [1] => 102 [代碼] => 102 [2] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]'SERVICES'附近的語法不正確。[message] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]'SERVICES'附近的語法不正確。

如果表名中有空格,則應這樣運行查詢:$ sql =“ SELECT * FROM dbo。[數據庫公司服務]”; 不確定您要使用$ employee做什么,因為php將其視為變量,然后嘗試將其粘貼到其中(我認為$ employee為NULL)。

嘗試切換

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

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

因為php認為$ Employee是變量,如果您使用雙引號。 []用於告訴數據庫表名稱為DATABASE COMPANY SERVICES$Employee否則該空間將指示另一個sql命令或變量的開始。

盡量不要在表名btw中使用空格,這樣可以避免混淆。

您需要使用\\$轉義$字符,因為php將其視為變量的第一個字符。 嘗試這個:

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

編輯:

為了避免轉義,您還可以使用單引號'而不是雙引號" 。然后PHP不會解析字符串中的變量。( 請參閱此問題

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

第二次編輯:

要連接兩個字符串,請使用. 像這樣的運算符:

$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).'\'';

但是,您永遠不要直接在SQL Server頂部直接發送GET參數。 任何人都可以滲透您的數據庫,甚至刪除它。 因此,您應該添加一個像這樣的轉義函數,或者考慮使用另一個數據庫庫(例如PDO)並構建參數化查詢。 我可能足以用另一個單引號將變量內的單引號轉義,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM