我即将开始使用mssql
和php
建立网站。
然而,我计划使用PDO,因为我当前认为它不可能使用命名参数。
目前在MySQL
我会在我的查询中使用命名占位符;
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT *
FROM table
LIMIT :numRows";
$st = $this->conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
但是在使用MSSQL
;
$conn = new PDO("mysql:host=" . DB_HOST .";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
$sSQLInsert = "SELECT TOP ? *
FROM table";
$aParams = array($iLimit);
$st = sqlsrv_query($dbhandle, $sSQLInsert, $aParams)){}
当我有许多需要绑定的参数时,会出现我的担心。管理它们的顺序并在查询参数之间来回跳舞似乎并不理想。
所以我的问题;是否可以使用MSSQL
命名的占位符?
答案 0 :(得分:1)
这是一个编写支票的简单脚本,但我找到了文档和示例!答案是肯定的!名称参数适用于PDO_MSSQL。
https://msdn.microsoft.com/en-us/library/ff628166(v=sql.105).aspx
$stmt = null;
$contact = "Sales Agent";
$stmt = $conn->prepare("select * from Person.ContactType where name = :contact");
$stmt->bindParam(':contact', $contact);
$contact = "Owner";
$stmt->execute();
答案 1 :(得分:1)
否您不能使用带有sqlsrv_
或任何其他扩展名的命名占位符。
这仅是PDO
的一项功能。
但是,我计划使用PDO,因为我当前认为它不可行 使用命名参数。
您可以使用SQL服务器执行此操作:
$sql = "SELECT TOP :numRows *
FROM table";
$st = $this->conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
var_dump($st->fetch());
它不是关于服务器,它更多的是关于驱动程序,这个PDO优势,因为它与大多数数据库兼容。您不必更改代码,只需更改连接。
答案 2 :(得分:1)
您可能会看到以下PDF(自动下载pdf):
它包含与变量和数组绑定的示例。
$sql = ‘select Title,
FirstName,
MiddleName,
LastName
from SalesLT.Customer
where Title = :title and CustomerId<10’;
$query = $conn->prepare($sql);
$title = ‘Mr.’;
$query->bindParam(‘:title’, $title);
$query->execute();
与此同时,我将查找有关mssql驱动程序的信息,因为它显然会在其中播放。
编辑...至于司机,请查看此问题下的评论: From PDO to SQLSRV
答案 3 :(得分:0)
非常感谢所有对此的回复。过了一段时间,我设法让它工作,所以回答我的问题;是的,可以将命名占位符与MSSQL
一起使用。
安装SQLSRV PDO
扩展名后,占位符可以这样使用;
$database = "";
$server = "";
$conn = new PDO( "sqlsrv:server=$server ; Database = $database", DB_USER, DB_PASSWORD);
$sql = "SELECT * FROM Table WHERE MemberID =:MemberID";
$iMemberID = 5;
$st = $conn->prepare($sql);
//named placeholders within the execute() as an array.
$st->execute(array(':MemberID'=>$iMemberID));
//OR using bind param..
$st->bindParam(':MemberID', $iMemberID);
while ($row = $st->fetch()){
echo "<pre>";
var_dump($row);
echo "</pre>";
}
感谢Drew Pierce链接到驱动程序和pdf以及其他所有人的帮助。