将参数添加到PHP mssql查询中

时间:2011-07-19 08:48:18

标签: php sql-server

给出以下查询(在代码中,不是存储过程);如何在查询中添加参数,而不是直接在查询中包含条件值?换句话说:如何使这个数据库调用安全?


$dbhandle = mssql_connect($myServer, $myUser, $myPass); 
$selected = mssql_select_db($myDB, $dbhandle); 

$query  = "SELECT lastname, firstname, address, phone, email ";
$query .= "  FROM person";
$query .= " WHERE lastname LIKE '" . $lastName . "'";

$result = mssql_query($query);

while($row = mssql_fetch_array($result)) {
... etc.

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

首先放弃过时的扩展程序并改为使用sqlsrv

  

这些功能允许您访问MS SQL Server数据库。

     

此扩展程序不再适用于使用PHP 5.3或Windows的Windows   后面。

     

SQLSRV是Microsoft提供的另一种MS SQL驱动程序:   »http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx

之后,您将获得准备好的声明支持:

$dbh = sqlsrv_connect ($serverName, $credentials);
$stmt = sqlsrv_prepare($dbh, 'SELECT lastname,firstname,address,phone,email FROM person WHERE lastname LIKE ?', array(&$lastName));


if(sqlsrv_execute($stmt))
{
   while(false !== ($row = sqlsrv_fetch_array($stmt)){
     // do stuff with $row
   }
}

当然,如果我是,我会使用PDO,因为其他人建议使用相同的接口向所有数据库提供它支持的扩展。

如果由于某种原因您使用mssql卡住了,那么我相信您也会手动转义所有查询参数。

答案 2 :(得分:0)

您需要的是准备好的声明(或者只是允许您参数化查询的DAL!)。一种选择是使用PDO,特别是使用PDO_SQLSRV驱动程序..

执行此操作时,您可以以参数化形式准备查询,并在查询时传递它们,例如..

$conn = new PDO("sqlsrv:Server=$myServer;Database=$myDB", $myUser, $myPass);
$stmt = $conn->prepare('SELECT lastname,firstname,address,phone,email FROM person WHERE lastname LIKE ?');
$stmt->execute(array($lastname));
$result = $stmt->fetchAll();
foreach ($result as $row) {
    ...

(注意上面的代码应该是就地替换,但是未经测试!)

如果您的查询中有很多参数,最好使用命名参数,以便更好地跟踪它们。