2017-03-09 156 views
1

在庫MySQLi我會做:MSSQL參數化查詢

$sql = $connect->prepare("INSERT INTO Table (a, b) VALUES (?, ?)"); 
$sql->bind_param('ss', $a, $b); 
$sql->execute(); 
$sql->close(); 

現在的問題是,我該怎麼做MSSQL同樣的事情了SQL Server而不是MySQL的?

我知道我可以做的:

$sql = sqlsrv_query($connect, "INSERT INTO Table (a, b) VALUES (?, ?)", array($a, $b)); 

然而,這需要SQL特定的驅動程序的Windows,我不能在使用Linux平臺(這裏其實我的網站託管)。

我的服務器,不過MSSQL庫安裝,即使它過時了,還是它的工作相當不錯的使用PHP 5.6

我有,雖然參數化查詢的麻煩,我所能做的是:

$sql = "INSERT INTO Table (a, b) VALUES ('$a', '$b')"; 
mssql_query($sql, $connect); 

但當然,我不想直接插入值,所以我怎麼可以參數化該查詢在mssql上?

回答

0

似乎這不是最簡單的事情。反正肯定準備好的語句將PDO

發生從原來的PHP文檔:

如果這是不可能使用SQLSRV,您可以使用PDO_ODBC司機 連接到Microsoft SQL Server和Sybase數據庫,原生的 Windows DB-LIB是古老的,線程不安全的,並且不再受Microsoft的 支持。

您可以在UNIX系統上讀取PDO_ODBC爲你的情況部分。不要忘了閱讀評論,他們可能會有助於您瞭解應如何發生。

您可以參考this堆棧溢出問題。

這就是你怎麼能有PDO參數化查詢:

$sql = 'SELECT name, colour, calories FROM fruit 
    WHERE calories < :calories AND colour = :colour'; 
// where $dbh is PDO object 
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array(':calories' => 150, ':colour' => 'red')); 
$red = $sth->fetchAll(); 
$sth->execute(array(':calories' => 175, ':colour' => 'yellow')); 
$yellow = $sth->fetchAll(); 

看到official docs其他例子。

祝你好運的朋友,不要忘記分享你的經驗。