繁体   English   中英

具有WHERE子句和GET参数的php MS SQL查询

[英]php MS SQL query with WHERE clause and GET Parameter

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

如何查询电子邮件等于在提交表单中输入的电子邮件的列/列?

如果您的表单在邮寄中,则可以使用$ _POST而不是$ _GET,如果可以的话。 我个人还是用post。 您需要过滤来自用户的每个输入,并且如果变量是字符串,则必须用引号将其引起来。

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

要连接两个字符串,请使用. 像这样的运算符:

$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);
}

我对sqlsrv不太了解。 但是您的查询存在语法错误,

制作动态字符串时,需要与dot( . )运算符连接

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM