直到几天前,这一直在进行。我们正在使用以下代码构建一个 docker 容器,但这是尝试“pecl install sqlsrv”时发生的错误。尝试从该容器中的 PHP 连接到 mssql 服务器。有比我聪明的人有什么想法吗?
泊坞窗文件:
FROM --platform=linux/amd64 php:8.0-fpm
RUN apt-get update && apt-get -y install nano apt-utils libxml2-dev gnupg \
&& apt-get install -y zlib1g-dev \
&& apt-get install -y libzip-dev \
&& docker-php-ext-install zip
RUN apt-get -y install libicu-dev gcc g++ make autoconf libc-dev pkg-config libssl-dev apt-transport-https libgss3
# Install MS ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update
# …Run Code Online (Sandbox Code Playgroud) 这是我的设置
我需要加载Microsoft的SQLSRV库.
我已将'extension = php_sqlsrv_54_ts.dll'添加到php.ini并将'php_sqlsrv_54_ts.dll'复制到安装了PHP的ext文件夹中.
当我重新启动apache时,我的php错误日志中出现以下错误,并且phSfo中未列出SQLSRV.
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php5\ext\php_sqlsrv_54_ts.dll' - %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
编辑出于测试目的,我刚刚安装了PHP 5.5.10 64位和VC 2012,但错误仍然相同:(
我从MySQL迁移到MS SQL Server,并尝试从例程表中获取所有数据.我已连接但不确定如何使用sqlsrv获取数据.这是我走了多远:
$conn_array = array (
"UID" => "sa",
"PWD" => "root",
"Database" => "nih_bw",
);
$conn = sqlsrv_connect('BILAL', $conn_array);
if ($conn){
echo "connected";
$result = sqlsrv_query($db->db_conn,"SELECT * FROM routines");
}else{
die(print_r(sqlsrv_errors(), true));
}
sqlsrv_close($conn);
?>
Run Code Online (Sandbox Code Playgroud) 我试图获取查询中返回的行数.循环遍历结果的while循环有效,但由于某种原因,sqlsrv_num_rows不返回任何值:
$result = "SELECT * from dtable WHERE id2 = 'apple'";
$query = sqlsrv_query($conn, $result);
$row_count = sqlsrv_num_rows($query);
echo $row_count;
while($row = sqlsrv_fetch_array($query))
{
echo 'yes';
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我已经查看了其他几个看起来与问题相同的问题(来自标题).但是,我的情况有点不同.
以下工作(即我获得"成功",我的数据库执行我在运行给定变量的过程时所期望的):
$sql = "MyDB.dbo.myProcedure {$var1}, {$var2}, {$var3}";
$result = sqlsrv_query($myConn, $sql);
if (!$result) {
echo 'Your code is fail.';
}
else {
echo 'Success!';
}
Run Code Online (Sandbox Code Playgroud)
我想通过使用参数创建SQL字符串来避免(或减少)SQL注入的可能性.例如:
$sql = "select * from aTable where col1 = ? AND col2 = ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2));
//please note. This code WILL work!
Run Code Online (Sandbox Code Playgroud)
但是,当我使用存储过程执行此操作时,它会失败.它失败,没有通过sqlsrv_errors()报告错误,没有在数据库中采取任何操作,和$result === false.
需要说明的是,以下内容失败:
$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$result = sqlsrv_query($myConn, $sql, array($var1, $var2, $var3));
Run Code Online (Sandbox Code Playgroud)
同样,以相同方式创建的prepare/execute语句也将失败:
$sql = "MyDB.dbo.myProcedure ?, ?, ?";
$stmt …Run Code Online (Sandbox Code Playgroud) 我整日搜索在php 7 VC14 x64线程安全上找到sqlsrv dll的解决方案,但我没有找到解决方案.有没有人解决了这个问题:
[04-Oct-2015 19:48:05 UTC] PHP Warning: PHP Startup: pdo_sqlsrv: Unable to initialize module
Module compiled with module API=20131226
PHP compiled with module API=20141001
These options need to match
in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
这是我的php7 RC4信息:
System Windows NT 6.0 build 6002 (Windows Server 2008 Standard Edition Service Pack 2) AMD64
Build Date Sep 29 2015 17:15:28
Compiler MSVC14 (Visual C++ 2015)
Architecture x64
Run Code Online (Sandbox Code Playgroud) 我正在尝试在platform.sh上设置Microsoft ODBC驱动程序,以便我可以使用PDO_SQLSRV和SQLSRV PHP扩展.apt和其他sudo命令是有限的.但是,在构建期间,我可以设置环境变量,如LD_LIBRARY_PATH.
这是我到目前为止所尝试的.
export LD_LIBRARY_PATH="($pwd):$LD_LIBRARY_PATH"和LD_LIBRARY_PATH="($pwd):$LD_LIBRARY_PATH" /usr/sbin/php-fpm7.0不过,我收到以下错误:
SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver 13
for SQL Server to communicate with SQL Server. Access the following
URL to download the ODBC Driver 13 for SQL Server for x86:
http://go.microsoft.com/fwlink/?LinkId=163712
Run Code Online (Sandbox Code Playgroud)
更新
我执行时满足所有依赖项LD_LIBRARY_PATH=$(pwd) ldd libmsodbcsql-13.1.so.4.0.但是,当我启动时,LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" /usr/sbin/php-fpm7.0我仍然看到上面显示的错误.
我正在尝试使用此页面中的命令安装sqlsrv .但是,在跑步时
pecl install sqlsrv-4.2.0preview
Run Code Online (Sandbox Code Playgroud)
我收到错误:Error 1 ERROR: 'make' failed.
我试过了 :
apt-get update
apt-get install build-essential
apt-get install libpcre3-dev
apt-get install make
Run Code Online (Sandbox Code Playgroud)
所有这些都安装在最新版本上.
我正在使用php:7.0-apache图像运行容器.运行apachectl -V回报Apache/2.4.10 (Debian).
以下是我运行的命令的完整日志输出:https://pastebin.com/MYDY3xwU
我有一个连接 Azure 上的 sql server db 的 Laravel 应用程序。
在我的本地 Wamp 服务器上,该应用程序工作正常。我已经使用 docker 镜像安装在我的 linux 服务器上,并且没有连接 Azure DB。每次返回此错误消息:
SQLSTATE[HYT00]: [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (SQL: select * from [mytable])
Run Code Online (Sandbox Code Playgroud)
MSDOBC 驱动程序、sqlsrv 和 pdo_sqlsrv 已正确安装。
我想这与laravel有关,因为如果我用php脚本查询数据库就没有问题。
我的 .ENV 文件有 db 设置:
DB_CONNECTION=sqlsrv
DB_HOST=db.database.windows.net
DB_PORT=1433
DB_DATABASE=db_name
DB_USERNAME=db_user
DB_PASSWORD=pwd
Run Code Online (Sandbox Code Playgroud)
Laravel log 和 docker log 没什么有趣的,我不知道如何解决。
SQLSRV是PHP的唯一驱动程序,它能够将UTF-8字符串存储为双字节列(NVARCHAR而不是VARCHAR),这些列目前由Microsoft为PHP 5.2.X和5.3.X维护和支持.
我也得到了下载这些驱动程序的链接Linux SQLSRV驱动程序下载为Linux但我无法配置.
如果有人知道如何在linux上配置sqlsrv驱动程序或者有其他替代方法以UTF-8格式从SQL服务器检索数据,请分享.