PHP + MSSQL 使用 PDO,命名参数不是“?”
PHP + MSSQL using PDO with Named Parameters not '?'
我即将开始使用 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
一起使用?
这将是一个用于编写支票的简单脚本,但我找到了文档和示例!答案是肯定的!名称参数适用于 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();
否 您不能将命名占位符与 sqlsrv_
或任何其他扩展名一起使用。
这只是 PDO
的一个功能。
I plan to use PDO's, however, as I currenlty believe its not possible
to use named parameters.
您可以使用 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的优势在于它与大多数数据库兼容。您无需更改代码,只需更改连接即可。
您可能有幸看到以下 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
非常感谢您对此的所有回复。一段时间后,我设法让它工作了,所以回答我的问题;是的,可以将命名占位符与 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 link 驱动程序和 pdf 以及其他所有人的帮助。
我即将开始使用 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
一起使用?
这将是一个用于编写支票的简单脚本,但我找到了文档和示例!答案是肯定的!名称参数适用于 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();
否 您不能将命名占位符与 sqlsrv_
或任何其他扩展名一起使用。
这只是 PDO
的一个功能。
I plan to use PDO's, however, as I currenlty believe its not possible to use named parameters.
您可以使用 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的优势在于它与大多数数据库兼容。您无需更改代码,只需更改连接即可。
您可能有幸看到以下 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
非常感谢您对此的所有回复。一段时间后,我设法让它工作了,所以回答我的问题;是的,可以将命名占位符与 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 link 驱动程序和 pdf 以及其他所有人的帮助。