2014-07-02 49 views
0
<?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] WHERE Email = $_GET['email']'; 
$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->Last Name.", ".$obj->First Name."<br />"; 
} 
?> 

如何查詢列/列哪裏的電子郵件等於輸入的電子郵件表單submited?php MS SQL SQL查詢WHERE子句和GET參數

回答

0

連接兩個字符串使用.操作是這樣的:

$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 Server。任何人都可能滲透你的數據庫甚至刪除它。因此,您應該添加一個轉義函數,如this one或考慮使用另一個像PDO的數據庫並構建參數化查詢。這也可能是足以逃脫變量中單引號,像這樣的另一個單引號:

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

我對sqlsrv沒有太多的想法。但有語法錯誤查詢,

你需要用點來連接(.)運營商,同時使動態串

$sql = "SELECT * FROM Dbo.[DATABASE COMPANY SERVICES '".$Employee."'] 
     WHERE Email = '".$_GET['email']."'"; 
+0

雙引號已經解決其間的變數 - 所以你正在做的兩次在你的榜樣。 – Daniel

+0

他使用雙引號和連接,因爲該部分存在明顯的語法錯誤。這樣做可以防止人們犯這樣的錯誤:'$ sql ='blabla $ _GET ['email'] blabla';' $ _GET變量中的'''會破壞字符串......他必須使用串聯:'$ sql ='blabla'。 $ _GET ['email']。 'blabla''。事實上,stackoverflows的語法輪廓筆甚至可以很容易地在原文中看到 –

+0

問題是,'$ Employee'不應該是一個變量,而應該是數據庫名稱的一部分。 (請參閱所有者的最後一個問題)所以需要使用雙引號 - 簡單地連接郵件字符串。 在沒有轉義的情況下進一步在sql查詢中使用GET參數是一個嚴重的安全問題! – Daniel

1

如果你的表格是後,你應該使用$ _POST而不是$ _GET ,如果它沒有問題的話。我個人會使用帖子。您需要過濾來自用戶的每個輸入,並且如果它是一個字符串,則必須用引號括住變量。

if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    $email = $_POST['email']; 
    $sql = 'SELECT * FROM Dbo.[DATABASE COMPANY SERVICES$Employee] WHERE Email = "'.$email.'"'; 
} 
+0

這是我得到的錯誤: Array([0] => Array([0] => 42000 [SQLSTATE] => 42000 [1] => 1038 [code] => 1038 [2] => [Microsoft] [SQL Server Native Client 11.0] [SQL Server]對象或列名缺失或爲空。對於SELECT INTO語句,請驗證每列的名稱。對於其他語句,查找空別名。別名定義爲「」或[ ]是不允許的。將別名更改爲有效的名稱。)) – user3315848