<?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 />";
}
?>
如何查询电子邮件等于在提交的表单中输入的电子邮件的列/列?
答案 0 :(得分: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.'"';
}
答案 1 :(得分: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).'\'';
但是你永远不应该直接在你的sql server上发送一个GET参数。任何人都可以渗透你的数据库甚至删除它。因此,您应该添加一个类似this one的转义函数,或者考虑使用另一个像PDO这样的db-library并构建参数化查询。使用另一个单引号来转义变量中的单引号也可能就足够了:
function mssql_escape($str) {
return str_replace("'", "''", $str);
}
答案 2 :(得分:-1)
我对sqlsrv
不太了解。但是你的查询有语法错误,
您需要在制作动态字符串
时与点(.
)运算符连接
$sql = "SELECT * FROM Dbo.[DATABASE COMPANY SERVICES '".$Employee."']
WHERE Email = '".$_GET['email']."'";