标签: sqlsrv

PHP PDO Sqlsrv 始终以字符串形式返回每个值

如何从具有正确字段类型的数据库中获取值?

我正在使用 PDO Sqlsrv 从数据库获取数据,并且我总是以字符串形式接收数据,如下所示:customer_id : "1"我的customer_id字段类型应该是整数,customer_id : 1phone_number字段类型是 varchar 它返回正确的字符串类型,例如:phone_number : "12345678"

编辑:

我正在使用 PHP 5.5。我已经尝试过这个。

$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误Fatal error: Undefined class constant 'SQLSRV_ATTR_FETCHES_NUMERIC_TYPE'

我的 PDO 代码:

$this->dbh = new PDO('sqlsrv:Server=' . $_ENV['DB_HOST'] . ';Database=' . $_ENV['DB_NAME'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$this->dbh->exec('set names ' . $_ENV['DB_CHAR_SET']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); // Got Error 
$this->dbh->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);
Run Code Online (Sandbox Code Playgroud)

php pdo sqlsrv

5
推荐指数
1
解决办法
1605
查看次数

在 Ubuntu/NGINX 上的多个 PHP 版本上添加 SQLSRV 扩展

我设置了一台服务器,安装并运行了以下内容:

Ubuntu 20.04
NGINX 1.17.10
PHP 7.4.5

PHP 安装确实已安装 PDO SQLSRV 驱动程序并正常工作。

我需要将 PHP 5.6 添加到旧网站的同一服务器上。我能够成功安装 PHP 5.6。但我似乎无法正确安装 SQLSRV 驱动程序部分。

我之前在设置 PHP 7.4 时在服务器上安装了 mssql 工具:

apt-get install msodbcsql17 -y
apt-get install mssql-tools
 apt install unixodbc-dev
pecl install sqlsrv
pecl install pdo_sqlsrv
Run Code Online (Sandbox Code Playgroud)

在尝试将其设置为 5.6 时,我确实遵循了原始安装的步骤。我运行了以下命令:

 printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/5.6/mods-available/sqlsrv.ini
 printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/5.6/mods-available/pdo_sqlsrv.ini
 phpenmod -v 5.6 sqlsrv pdo_sqlsrv
 pecl config-set php_ini /etc/php/5.6/fpm/php.ini
 ls /etc/php/5.6/fpm/conf.d/*sqlsrv.ini
Run Code Online (Sandbox Code Playgroud)

所有命令均成功运行。然后我将以下行添加到相关的 php.ini 文件 /etc/php/5.6/fpm/php.ini

extension=sqlsrv.so
extension=pdo_sqlsrv.so
Run Code Online (Sandbox Code Playgroud)

我重新加载并重新启动 php5.6-fpm,然后重新启动 NGINX。PHP 5.6 已成功安装,我可以通过运行 phpinfo() 查看信息。我在安装过程中没有遇到任何错误。然而,在 PDO …

php ubuntu pdo nginx sqlsrv

5
推荐指数
0
解决办法
3179
查看次数

Laravel 绑定参数使用 insert() 和内部的 convert()

我很难绑定我的 SQL 查询,而且我只剩下几个脑细胞了。

基本上,此代码有效但容易受到 SQL 注入:

return DB::connection('sqlsrv_rfo_user')
    ->table('dbo.tbl_rfaccount')
    ->insert([
        'Email' => $email,
        'id' => DB::raw("CONVERT(binary, '$username')"),
        'password' => DB::raw("CONVERT(binary, '$password')"),
        'birthdate' => $birthday,
        'accounttype' => 0,
        'BCodeTU' => 1
    ]);
Run Code Online (Sandbox Code Playgroud)

我想弄清楚如何绑定这些代码行:

'id' => DB::raw("CONVERT(binary, '$username')"),
'password' => DB::raw("CONVERT(binary, '$password')"),
Run Code Online (Sandbox Code Playgroud)

我确实尝试过:

'id' => DB::raw("CONVERT(binary, ?)", [$username]),
'password' => DB::raw("CONVERT(binary, ?)", [$password]),
Run Code Online (Sandbox Code Playgroud)

并收到此错误:

SQLSTATE[07002]: [Microsoft][ODBC Driver 13 for SQL Server]COUNT field incorrect or syntax error (SQL: insert into [dbo].[tbl_rfaccount] ([Email], [id], [password], [birthdate], [accounttype], [BCodeTU]) values (user@example.com, CONVERT(binary, 2011-11-11 00:00:00), CONVERT(binary, …
Run Code Online (Sandbox Code Playgroud)

php sql sql-server laravel sqlsrv

5
推荐指数
1
解决办法
244
查看次数

用于php 5.5.x的Microsoft sqlsrv扩展

我们在Windows上运行php 5.3.27,nts.

我们刚刚因PCI中的会话固定漏洞而无法进行PCI扫描,需要重新获得PCI合规性.

这有点令人沮丧,因为我们在登录后使用session_regenerate_id(),所以在我看来(也许我错了)我们的应用程序即使是php也不容易受到攻击.

要通过扫描,我们需要升级到PHP 5.5.2.

我们使用Microsoft的sqlsrv驱动程序扩展,我注意到他们还没有发布php 5.5.x的版本

有没有人为这个问题提供生产可行的解决方案?

__ _ __ _更新_ __ _ __ _ __ _ _

我发现这 是一个非供应商版本http://social.msdn.microsoft.com/Forums/sqlserver/en-US/e1d37219-88a3-46b2-a421-73bfa33fe433/unofficial-php-55-drivers-x86.

有没有人在生产中使用过这个版本?

谢谢

php sqlsrv

4
推荐指数
1
解决办法
2万
查看次数

SQLSRV和存储过程中的多个选择

我有一个存储过程,它创建一个临时表(#test),用另一个表中的数据填充它,在这个时态表上运行3选择并删除它.

原始表大于20 GB,3个SELECT语句在原始SP上包含许多不同的条件.

我正在使用SQLSRV从PHP执行SP但是我只能设法检索2个第一个结果集.

如果我从MSSMS运行SP,它将运行得很好,并按预期返回3个结果集.但是从PHP它只会返回2(尝试每个组合).

不确定这是否是驱动程序sqlsrv_fetch_array或sqlsrv_next_result的问题.

SP的示例(选择语句太大,所以我只是恢复它们):

CREATE PROCEDURE sp_transfers
@dt date,
@campaign varchar(16)
AS
BEGIN
CREATE TABLE #test ( [column definitions...] )

BEGIN
INSERT INTO #test SELECT * FROM sometable WHERE dt = @dt AND campaign = @campaign

SELECT * FROM #test ...
SELECT * FROM #test ...
SELECT * FROM #test ...

DROP TABLE #test
END
Run Code Online (Sandbox Code Playgroud)

现在从PHP开始,这是我的测试代码:

$q = sqlsrv_query($conn,"EXEC sp_transfers @dt='2013-10-01',@campaign='1234'");

sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 1st resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as …
Run Code Online (Sandbox Code Playgroud)

php sql-server stored-procedures sqlsrv

4
推荐指数
1
解决办法
6617
查看次数

调用未定义的函数 sqlsrv_connect() - 故障排除

系统信息

内容管理系统:WordPress

网络服务器:XAMPP

PHP 版本:5.5.30

微软管理工作室 17

目标

使用 PHP 建立 MSSQL 数据库连接

已经做了什么

  1. 下载的 SQLSRV 驱动程序
  2. 将文件php_pdo_sqlsrv_55_nts.dllphp_pdo_sqlsrv_55_ts.dll复制到该目录C:\xampp\php\ext
  3. 将以下几行添加到 php.ini 文件中的动态扩展部分extension=php_pdo_sqlsrv_55_ts.dllextension=php_pdo_sqlsrv_55_nts.dll
  4. 重新启动网络服务器
  5. 已确认 sqlsrv 已在 phpinfo() 中列出

代码

$serverName = "technology-pc\sqlexpress";

// The connection will be attempted using Windows Authentication.
$connectionInfo = array( "Database"=>"example_db");
$conn = sqlsrv_connect($serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
} else {
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
Run Code Online (Sandbox Code Playgroud)

错误 …

php sql-server wordpress database-connection sqlsrv

4
推荐指数
1
解决办法
2万
查看次数

Pecl install sqlsrv 返回 Noreleases available for package

在为 PHP7 安装 sqlsrv 模块时,我收到以下错误 -

没有可用于包“pecl.php.net/sqlsrv”的版本

使用的命令

sudo pecl install sqlsrv 
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

php pecl sqlsrv php-7

4
推荐指数
1
解决办法
1万
查看次数

在windows下使用sqlsrv数据库Laravel迁移找不到驱动

我在我的项目中使用sqlsrv 数据库连接,因为我需要连接到 Microsoft SQL 数据库。

我已经成功安装了sqlsrv 驱动程序,因为我可以连接到数据库来检索数据。

但是当我尝试进行 Laravel 迁移时,它显示了一个错误:

Illuminate\Database\QueryException  : could not find driver (SQL: select * from sysobjects where type = 'U' and name = migrations)
Run Code Online (Sandbox Code Playgroud)

下面是我的 .env

DB_CONNECTION=sqlsrv
DB_HOST=**********.database.windows.net
DB_PORT=1433
DB_DATABASE=****************_4cd1_9d18_2a7d9ddbcd13
DB_USERNAME=***************_4cd1_9d18_2a7d9ddbcd13_ExternalWriter
DB_PASSWORD=***************
Run Code Online (Sandbox Code Playgroud)

配置文件

extension=php_xmlrpc.dll
extension=php_xsl.dll
extension=php_pdo_sqlsrv_7_nts_x64.dll
extension=php_pdo_sqlsrv_7_nts_x86.dll
extension=php_pdo_sqlsrv_7_ts_x64.dll
extension=php_pdo_sqlsrv_7_ts_x86.dll
extension=php_pdo_sqlsrv_71_nts_x64.dll
extension=php_pdo_sqlsrv_71_nts_x86.dll
extension=php_pdo_sqlsrv_71_ts_x64.dll
extension=php_pdo_sqlsrv_71_ts_x86.dll


extension=php_sqlsrv_7_nts_x64.dll
extension=php_sqlsrv_7_nts_x86.dll
extension=php_sqlsrv_7_ts_x64.dll
extension=php_sqlsrv_7_ts_x86.dll
extension=php_sqlsrv_71_nts_x64.dll
extension=php_sqlsrv_71_nts_x86.dll
extension=php_sqlsrv_71_ts_x64.dll
extension=php_sqlsrv_71_ts_x86.dll
Run Code Online (Sandbox Code Playgroud)

migration odbc laravel sqlsrv

4
推荐指数
1
解决办法
1万
查看次数

Symfony + MSSQL。错误 tls_process_server_certificate:证书验证失败:自签名证书

我尝试将 mssql 连接到我的 symfony 项目,但收到错误 SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:1416F086:SSL 例程:tls_process_server_certificate:证书验证失败:自签名证书]所以我想在 pdo 概念上设置“TrustServerCertificate=yes”,但无法弄清楚它在
我尝试在 .env 中编写的symfony 上的表现

DATABASE_MSSQL_URL="mssql://用户:密码@ip:端口/db_name?Trusted_Connection=yes&Encrypt=yes&TrustServerCertificate=yes"

在 config/packages/doctrine.yaml 中:

   dbal:
     jtl:
        url: '%env(resolve:DATABASE_MSSQL_URL)%'
        driver: 'pdo_sqlsrv'
        server_version: '13'
        charset: utf8mb4
Run Code Online (Sandbox Code Playgroud)

这没有帮助

sql-server pdo symfony sqlsrv

4
推荐指数
1
解决办法
3828
查看次数

如何使用xampp连接sql服务器和php?

我正在尝试使用 Xampp 将我的 SQL 服务器与 PHP 连接。我已经在ext文件夹中上传了dll文件,但无法连接它。我的PHP版本是7.2.6。上传的dll文件是-php_pdo_sqlsrv_72_ts.dll、php_sqlsrv_72_ts.dll。我编写了这段代码来使用 PHP 连接我的 SQL 数据库-

<?php   
$serverName = "INDO-SERV\SQLEXPRESS,1443";  
$uid = "sa";     
$pwd = "XXXXXX";    
$databaseName = "web";  
$connectionInfo = array("UID" => $uid, "PWD" => $pwd, "Database"=>$databaseName);  
$conn = sqlsrv_connect( $serverName, $connectionInfo);  
if( $conn )  
{  
     echo "Connection established.\n";  
}  
else  
{  
     echo "Connection could not be established.\n";  
     die( print_r( sqlsrv_errors(), true));  
}  
sqlsrv_close( $conn);  
?>     
 
 
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我收到此错误 -

致命错误:未捕获错误:调用 C:\xampp\htdocs\biometric\db.php:7 中未定义的函数 sqlsrv_connect() 堆栈跟踪:#0 {main} 抛出 C:\xampp\htdocs\biometric\db.php 7号线。

任何人都知道我做错了什么或者如何连接数据库。

php sql-server xampp phpmyadmin sqlsrv

3
推荐指数
1
解决办法
4万
查看次数