标签: sqlsrv

如何在Laravel中修复PDO sqlsrv连接超时?

开发商!

我正在使用Laravel框架,我需要连接到MS SQL 2014 Express数据库.我已经在.env中进行了所有正确的配置(我甚至尝试过将连接参数直接放到database.php配置中)但是在第一次请求时我总是会遇到错误:

PDOException in Connector.php line 55:
SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
Run Code Online (Sandbox Code Playgroud)

超时后,我总是得到这个PHP致命的:

FatalErrorException in Connector.php line 55
Invalid handle returned.
Run Code Online (Sandbox Code Playgroud)

作为开发工具我正在使用XAMPP,当我重新启动apache服务器时,有时我可以成功建立连接,但只有20-30次尝试中的1次.

Laravel正在使用PDO驱动程序,所以我尝试使用sqlsrv_connect() - 它有效!没有错误,一切都很好.

有人可以帮我配置PDO吗?Laravel只使用PDO驱动程序,因此我不能只切换到sqlsrv_connect.

pdo sqlsrv laravel-5.2

7
推荐指数
1
解决办法
3292
查看次数

使用sqlsrv将php 7.2连接到MS SQL

我正试图在我的机器上通过PHP连接到MS SQL并运行.我正在运行IIS,安装了PHP 7.2和MS SQL Express 2017.我的基本网页正在运行,但是当我点击打开PHP页面时,连接不起作用.

session_start();

echo "Hello ";
if (isset($_POST['submit'])) {
    $_SESSION["server"] = $_POST['server'];
    $_SESSION["database"]= $_POST['database'];
    $_SESSION["username"] = $_POST['username'];
    $_SESSION["password"] = $_POST['password'];

    echo $_SESSION["database"];

    //CONNECTION
    $serverName = $_SESSION["server"];
    $connectionInfo["Database"] = $_SESSION["database"];
    $connectionInfo["UID"] = $_SESSION["username"];
    $connectionInfo["PWD"] = $_SESSION["password"];

    echo "midway";

    $conn = sqlsrv_connect($serverName, $connectionInfo);

    echo "Bye";
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到"中间的Hello尺寸",这表明页面正在工作,直到它到达连接线.
我不确定要使用哪个sqlsrv扩展名.
我环顾四周,可以看到7和7.1的版本,但不是7.2.

我已经添加extension=php_sqlsrv_71_nts_x86.dll到php.ini的底部(并且文件存在C:\Program Files (x86)\PHP\v7.2\ext).

任何指针都会感激不尽.我花了几天时间在这上面,不要以为我会在任何地方.
谢谢

php sql-server sqlsrv php-7.2

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

useradd Dockerfile 中的无效用户

我正在尝试将 Docker 映像与 Laravel + Microsoft SQL 驱动程序一起使用。

我的泊坞窗文件:

FROM php:7.2-apache

ENV ACCEPT_EULA=Y

# Microsoft SQL Server Prerequisites
RUN apt-get update \
    && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/debian/9/prod.list \
        > /etc/apt/sources.list.d/mssql-release.list \
    && apt-get install -y --no-install-recommends \
        locales \
        apt-transport-https \
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
    && locale-gen \
    && apt-get update \
    && apt-get -y --no-install-recommends install \
        unixodbc-dev \
        msodbcsql17

RUN docker-php-ext-install mbstring pdo pdo_mysql \
    && pecl install sqlsrv …
Run Code Online (Sandbox Code Playgroud)

laravel docker sqlsrv

7
推荐指数
1
解决办法
9575
查看次数

在csv文件中获取列名称

正在创建一个CSV文件,并想知道如何在第一行中获取列名.现在我认为它试图回应列名称,但得到0'nulls.我也想知道是否可以将每个值放在每个单元格中,我可以在excel中手动完成,但这很麻烦.

在此输入图像描述

这是代码:

$result=sqlsrv_query($conn,$sql) or die("Couldn't execute query:<br>" . sqlsrv_error(). "<br>" . sqlsrv_errno()); 

$file_ending = "csv";
$reals=array();
//header info for browser
header("Content-Type: application/csv");    
header("Content-Disposition: attachment; filename=test.csv");  
header("Pragma: no-cache"); 
header("Expires: 0");
/*******Start of Formatting for Excel*******/   
//define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character

$i=0;
foreach( sqlsrv_field_metadata( $result ) as $fieldMetadata ) {    
       echo $fieldMetadata["Name"]+"\t";
       if($fieldMetadata["Type"]=="real")//$fieldMetadata["Type"]=== SQL_REAL
       {
           $reals[] = $i;
       }
       $i++;
}


print("\n");    
//end of printing column names  
//start while loop to get …
Run Code Online (Sandbox Code Playgroud)

php sql-server csv excel sqlsrv

6
推荐指数
1
解决办法
1375
查看次数

无法使用 PHP 脚本连接到 SQL Server

我运行 SQL Server 2016。我尝试通过 PHP 脚本(PHP 版本 8)连接到它。我安装了驱动程序并在 php.ini 中添加了路径(与我的 PHP 版本相同):

...
extension=pdo_sqlsrv_80_nts
extension=pdo_sqlsrv_80_ts
extension=sqlsrv_80_nts
extension=sqlsrv_80_ts
...
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

$serverName = "<ServerName>";
$connectionInfo = array( "Database"=>"<database>", "UID"=>"<user>", "PWD"=>"<pwd>");
$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)

我收到以下错误:

Array
(
    [0] => Array
        (
            [0] => IM006
            [SQLSTATE] => IM006
            [1] => 0
            [code] => 0
            [2] => [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr …
Run Code Online (Sandbox Code Playgroud)

php sql-server sqlsrv

6
推荐指数
2
解决办法
9058
查看次数

如何从PHP 5.3及更高版本连接到MSSQL 2000

我有一个基于MS SQL Server 2000构建的遗留业务应用程序.我有一些基于Web的实用程序,使用带有mssql扩展名的PHP 5.2访问此数据库.

我需要重新安装Web服务器,我期待升级到PHP 5.4.不幸的是,PHP 5.3及更新版本不支持mssql扩展.Microsoft提供sqlsrv扩展,但描述说它仅支持访问SQL Server 2005及更高版本.

如何从PHP 5.4连接到我的SQL Server 2000?有人已经解决了这个问题吗?

compatibility upgrade sql-server-2000 php-5.3 sqlsrv

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

[Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效的对象名称

我想访问MS SQL Server并具有选择查询.我已经安装了dll文件并使用了sqlsrv_query.连接成功但我得到:

[Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效的对象名称为错误

我使用的是PHP 5.3.1版

连接后我有这个代码

$sql = "SELECT id, latitude, longitude from job ";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      echo $row['latitude'].", ".$row['longitude']."<br />";
}
sqlsrv_free_stmt( $stmt);
Run Code Online (Sandbox Code Playgroud)

php sql-server sqlsrv

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

使用Yii2在sqlserver中选择Schema和table?

我有sql server数据库,它有多个架构.我尝试使用sqlsrv驱动程序从不同模式的表中选择一个,但是表示无效配置,该表不存在.如何使用sqlsrv驱动程序在表中选择架构?

MyConnection的

<?php 
    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'sqlsrv:Server=192.168.10.70;Database=mydatabase', // MS SQL Server, sqlsrv driver public ip
        'username' => 'user_username',
        'password' => 'user_password',
        'charset' => 'utf8',
    ];
?>
Run Code Online (Sandbox Code Playgroud)

我的模特

<?php
    namespace app\models;

    use Yii;
    use yii\db\ActiveRecord;

    class Transaction extends \yii\db\ActiveRecord
    {
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'schema2.transaction';
        }

        public static function getDb()
        {
            return \Yii::$app->db3;  // use the "db3" application component
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [[['id', …
Run Code Online (Sandbox Code Playgroud)

php sql-server sqlsrv yii2

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

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
查看次数