我遇到了一些不太有意义的事情。当您尝试将数据从 SQL Server 数据库返回到 PHP 时,我注意到发生了一件奇怪的事情。如果你在 PHP 中使用 SQL Sever Native Client 驱动,根据网上的文章,NVARCHAR(MAX) 应该是作为流类型返回的。在 SQL Server Management Studio 中,如果我使用这些数据类型创建一个新表,则 nvarchar(max) 字段将作为流返回:
[PK][int]
[nvarchar(255)]
[nvarchar(max)]
如果我使用这些数据类型创建表,则 nvarchar(max) 将作为其实际值返回,而不是流。
[PK][int]
[nvarchar(256)]
[nvarchar(max)]
我在某处看到如果您不说要使用 SQL Native Client 驱动程序,您无法在 PHP 中正确使用 nvarchar(max),但是我确实将其编码以使用它。这是在 Windows Server 2003 上使用 SQL Server 2005、PHP 5.3 执行的。
谁能解释为什么我可以在一张表中而不是另一张表中获得 nvarchar(max) 的实际值?
我不需要知道如何解决它,无论如何我都在为我的表使用 NVARCHAR(4000),我只想知道为什么 NARCHAR(256) 允许 NVARCHAR(MAX) 工作,即使它不应该工作根据我在网上看到的。
编辑:
这是我使用并更改以访问使用存储参数的基本 PHP 代码:
<?php
$user = "usercm";
$pass ="cmuserpassword";
try{$conn = new PDO("odbc:DRIVER={SQL Server Native Client 10.0};SERVER=EXAMPLE;DATABASE=EXAMPLE;",$user,$pass);}
catch(PDOException $e){echo "Connection Failed";}
if($conn)
{
$uspGetAll = $conn->prepare("{CALL uspGetPowerDetails()}");
if($uspGetAll->execute())
{
$results = $uspGetAll->fetchAll(PDO::FETCH_ASSOC);
$_SESSION['testExample'] = $results;
}
$conn = null;
?>
我不想知道其他驱动程序,我只想知道为什么声明为 256 或以上的不同字段会改变 nvarchar(MAX) 是否作为流返回。