标签: sqlsrv

使用INPUT Paramters使用PDO从MS调用存储过程到MSSQL Server

这不起作用:

  $dbh = new PDO("dblib:host=xxxx;dbname=xxx", "xxxxx", "xxxxx");

  $sth = $dbh->prepare("{exec wcweb_UserInfo(?)}");
  $sth->bindParam(1, $name);
  $sth->execute();

  while($result = $sth->fetch(PDO::FETCH_ASSOC)) {
    var_dump($result);
  }
Run Code Online (Sandbox Code Playgroud)

这也行不通:

  $dbh = new PDO("dblib:host=xxxxx;dbname=xxxx", "xxxxx", "xxxx");

  $sth = $dbh->prepare("{call wcweb_UserInfo(?)}");
  $sth->bindParam(1, $name);
  $sth->execute();

  while($result = $sth->fetch(PDO::FETCH_ASSOC)) {
    var_dump($result);
  }
Run Code Online (Sandbox Code Playgroud)

这个工作:

  $dbh = new PDO("dblib:host=xxxxx;dbname=xxxx", "xxxxx", "xxxx");

  $sth = $dbh->prepare("exec wcweb_UserInfo @userid=?");
  $sth->bindParam(1, $name);
  $sth->execute();

  while($result = $sth->fetch(PDO::FETCH_ASSOC)) {
    var_dump($result);
  }
Run Code Online (Sandbox Code Playgroud)

我尝试了上面使用的2没有大括号的工作,等等.我知道有些人会说,好吧,就像它的工作方式一样吗?..问题是我使用sqlsrv_query库从IIS服务器移植一个正在运行的应用程序到Linux服务器.

应用程序中的所有数据库调用都是使用此方法编写的函数:{call wcweb_UserInfo(?)} ..没有指定任何参数名称,因此我必须修改每个数据库调用以包含参数名称.我的印象是PHP5的PDO库可以做同样的调用吗?

救命!有什么我做错了或只是PDO无法拨打这类电话?

php sql-server pdo fetch sqlsrv

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

使用PHP通过sqlsrv驱动程序在sql server中插入当前日期时间

直到现在我都试过了

$sql = "INSERT INTO table-name(col-name) values (cureent_timestamp)";
Run Code Online (Sandbox Code Playgroud)

并将列数据类型设置为datetime,我得到一些值但没有日期或时间.

php sql sql-server datetime sqlsrv

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

PDO sqlsrv 数据库连接超时

使用 MySQL 我可以使用

$pdo->setAttribute(PDO::ATTR_TIMEOUT, 5);
Run Code Online (Sandbox Code Playgroud)

设置连接超时值。但是当我使用 sqlsrv 驱动程序时,它的工作方式有所不同。你能解释一下如何用 sqlsrv 设置连接超时吗?

提前致谢。

php mysql pdo sqlsrv

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

PHP SQLSRV 在 sqlsrv_fetch_array/sqlsrv_fetch 上有间歇性延迟

我们将数据库连接从 ADODB 切换到 SQLSRV,我似乎遇到了问题,导致使用 sqlsrv_fetch_array 出现间歇性延迟。

我在我的数据库中做了一个查询,返回大约 426 行,包含 5 个字段。

代码看起来像这样(为了速度基准测试,我真的删除了它正在做的任何其他事情):

$conn = sqlsrv_connect( $host, array("UID"=>$userName,"PWD"=>$password,"Database"=>$dbName,"QuotedId"=>false, "CharacterSet" =>"UTF-8");

$rsText=sqlsrv_query($conn,$sqlStr,array(),
                array(
                    "Scrollable"=>SQLSRV_CURSOR_STATIC
                ));

$row = array(1);
while(count($row) != 0){
    $row=sqlsrv_fetch_array($rsText,SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_NEXT);
}
Run Code Online (Sandbox Code Playgroud)

使用 ADODB 运行它需要大约 50 毫秒。使用 sqlsrv 运行它需要 500-1000 毫秒。使用 sqlsrv 的原始查询 (sqlsrv_query) 实际上比 ADODB 更快,但是 sqlsrv_fetch_array 存在随机时间延迟(我实际上使用 sqlsrv_fetch 进行了测试,也得到了它们)。我每次调用它都以毫秒为单位计时,虽然每次调用通常是 0-1 毫秒,但有时它会长达 15 毫秒。为什么我说它是随机的,因为如果我多次重新运行代码,延迟不会发生在同一个地方,并且数量会有所不同,所以这不是因为特定行很大(它们都不是) .

有没有人知道我可以看到什么可以做这件事,无论是某个地方的参数还是配置?我认为 ADODB 从不这样做,这与服务器/网络无关。我们使用 PHP 5.6 和 php_sqlsrv_56_ts.dll / php_pdo_sqlsrv_56_ts.dll 和 SQL Server 2008。

谢谢!

php performance adodb sqlsrv

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

Mssql_connect php7.1与ubuntu

我正在使用Windows 10和sql server为我的网站(我使用codeigniter),在Windows这里是我的设置

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '----',
    'username' => '--',
    'password' => '-----',
    'database' => '-----',
    'dbdriver' => 'sqlsrv',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);
Run Code Online (Sandbox Code Playgroud)

但现在,我想将我的网站从本地上传到我的服务器.我的服务器使用ubuntu

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty
Run Code Online (Sandbox Code Playgroud)

当我上传我的codeigniter时,我收到此错误

Message: …
Run Code Online (Sandbox Code Playgroud)

php linux ubuntu sqlsrv

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

如何在 Laravel DB::insert 中返回我的 OUTPUT 子句

我正在使用 Laravel 和 sqlsrv,连接到 SQL Server 2016 并且一切正常,直到我尝试在插入查询中使用输出子句。

查询是这样的

INSERT INTO TABLE(Columns) OUTPUT INSERTED.MyDesiredReturnColumn VALUES(Value)
Run Code Online (Sandbox Code Playgroud)

这在 SQL Server 中运行良好,并返回所需的值,但使用 Laravel 的 DB::insert 功能它只返回 1(成功插入)

我有一个我现在不想拥有的解决方法,使用 CreatedOn 字段返回最近创建的行,但这有潜在的问题。

更新:我试图检索的字段是在 SQL 中创建的唯一标识符字段 (guid),而不是从 Laravel 端创建

在尝试@PrathameshPalav 的使用 Eloquent 模型创建的建议后,值被正确插入到数据库中,但它仍然没有返回 uniqueidentifier。

$inserted = MyModel::create($information);
print "inserted id is " . $inserted->MyModelId;
Run Code Online (Sandbox Code Playgroud)

这是打印“插入的 id 是”

这是我的模型:

namespace App;
use Illuminate\Database\Eloquent\Model;    
class MyModel extends Model
{
    //
    protected $table = 'MyModelBase';
    protected $primaryKey = 'MyModelId';
    public $incrementing = false;
    protected $keyType = "string";
    public $timestamps …
Run Code Online (Sandbox Code Playgroud)

php sql database laravel sqlsrv

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

laravel 中插入数据 IDENTITY_INSERT 设置为 OFF

所以当我在数据库sqlserver上插入数据时遇到问题。sqlserver拒绝插入id,因为数据库想要自己插入id。

我必须尝试像这样设置 IDENTITY_INSERT ON :

DB::statement('SET IDENTITY_INSERT articles ON;');

并将 IDENTITY_INSERT 设置为 OFF,如下所示:

DB::statement('SET IDENTITY_INSERT articles OFF;');

但这对我的代码不起作用。

   public function store(Request $request){
        //to sparate to methode
        $article = $request->isMethod('put') ? Article::findOrFail($request->article_id) : new Article;

        $article->id = $request->input('article_id');
        $article->title = $request->input('title');
        $article->body = $request->input('body');

        DB::statement('SET IDENTITY_INSERT articles ON;');
        if($article->save()){
            return new ArticleResources($article);
        }
        DB::statement('SET IDENTITY_INSERT articles OFF;');

    }
Run Code Online (Sandbox Code Playgroud)

这个错误看起来像这样:

SQLSTATE[23000]:[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]当 IDENTITY_INSERT 设置为 OFF 时,无法在表“articles”中插入标识列的显式值。

laravel sqlsrv

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

如何使用 sqlsrv_* 函数转义字符串?

我如何real_escape_string在 sqlsrv 中使用?

这是我的代码:

$uname = sqlsrv_real_escape_string($conn, trim($_POST['uname']));
$pass  = sqlsrv_real_escape_string($conn, trim($_POST['pword']));
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

未定义函数sqlsrv_real_escape_string

php sql-server sqlsrv

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

无法将 SQLEXPRESS 与 Laravel 5.6 连接

我正在尝试将 Laravel 5.6 连接到我的 SQLEXPRESS。

当我尝试将表从 Laravel 迁移到 SQL 时,出现此错误:

SQLSTATE[08001]:[Microsoft][ODBC Driver 13 for SQL Server]TCP 提供程序:无法建立连接,因为目标机器主动拒绝它。(SQL: select * from sysobjects where type = 'U' and name = migrations)

我已经将 sqlsrv extionsion 安装到 php 并对其进行了测试:

<?php
$serverName = "MYNAME\\SQLEXPRESS"; 

$connectionInfo = array( "Database"=>"Portal", "UID"=>"sa", "PWD"=>"mySecretPwd");
$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)

连接成功建立。

我还在 phpinfo(); 中看到了扩展名;

但是如果使用此设置切换到 Laravel 5.6:

我的环境: …

php sql-server ssms laravel sqlsrv

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

Mac M1 SQL Server SQLSrv OpenSSL 库无法加载,请确保安装了 OpenSSL 1.0 或 1.1

我刚刚购买了运行 Big Sur 11.6 的 M1 Mac mini,我安装了 PHP 7.3、msodbcsql17、mssql-tools、sqlsrv 和 pdo_sqlsrv。

但是当我尝试使用 sqlsrv 连接时,出现以下错误 [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [无法加载 OpenSSL 库,请确保安装 OpenSSL 1.0 或 1.1]

我已经通过brew安装了openssl@1.1,我的个人资料包含

export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

PHP 似乎使用了正确的版本,当打印 echo OPENSSL_VERSION_TEXT 时,它显示 OpenSSL 1.1.1l 24 Aug 2021

我不确定还要尝试什么才能使其发挥作用?

php macos openssl sqlsrv apple-m1

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

标签 统计

sqlsrv ×10

php ×9

sql-server ×4

laravel ×3

pdo ×2

sql ×2

adodb ×1

apple-m1 ×1

database ×1

datetime ×1

fetch ×1

linux ×1

macos ×1

mysql ×1

openssl ×1

performance ×1

ssms ×1

ubuntu ×1