我将PHP 5.6.30(https://www.apachefriends.org/de/download.html)升级到PHP 7.0(https://bitnami.com/stack/wamp/installer)
到目前为止,一切都运行良好,当我使用MySQL数据库时,它减少了从我的Page的加载时间从1,2秒减少到300毫秒。但现在我正在尝试使用以下简单脚本连接到MSSQL数据库,这对我的旧安装(PHP 5.6)工作正常:
<?php
//Use the machine name and instance if multiple instances are used
$server = 'Server-Adress';
$user = '';
$pass = '';
//Define Port
$port='Port=1433';
$database = 'Databasename';
$connection_string = "DRIVER={SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);
if ($conn) {
echo "Connection established.";
} else{
die("Connection could not be established.");
}
$sql = "SELECT * FROM st3_200 WHERE identifier = 1";
$result = odbc_exec($conn,$sql);
// Get Data From Result
while ($data[] = odbc_fetch_array($result));
// Free Result
odbc_free_result($result);
// Close Connection
odbc_close($conn);
// Show data
print_r($data);
?>
但现在我的日志中出现了错误:
[12月10日11:55:26.629956 2015] [:错误] [pid 260:tid 968] [客户 :: 1:63003] PHP致命错误:未捕获错误:调用未定义 函数odbc_connect()in C:\ Bitnami \ wampstack-7.0.0-0 \的Apache2 \ htdocs中\测试\ query.php:11 \ nStack trace:\ n#0 {main} \ n抛出 C:\ Bitnami \ wampstack-7.0.0-0 \ apache2 \ htdocs \ test \ query.php on 第11行
首先我想,我的php.ini有一个缺少的扩展名,所以我启用了“extension = php_pdo_odbc.dll”
与5.6版本中的php.ini的区别在于有扩展名: 启用“extension = php_mssql.dll”。但我在新的PHP 7.0.ini
中找不到它们所以我的意图是没有odbc和PHP 7的现有驱动程序了吗? 我在这里找到了一些Linux驱动程序: https://aur.archlinux.org/packages/php7-odbc/
但我的Windows环境需要一些东西。
有没有人遇到同样的问题并且已经修好了?
感谢和问候 多米
答案 0 :(得分:9)
看看你的php.ini,字符串
extension=php_odbc.dll
似乎在新安装中缺失,至少我必须在我的新XAMPP安装中手动添加它(7.0.1) 并且意外地只是激活了pdo_odbc.dll
答案 1 :(得分:5)
PHP7 默认禁用了一些先前在 PHP5 中启用的模块。
这是一个简单的解决方法,因为扩展应该已经存在于 PHP7 附带的\ext\
文件夹中。您只需修改php.ini
文件即可包含以下行:
extension=php_odbc.dll
上面的行不已经存在并已注释掉;你真的需要添加它!
PHP在php.ini
中查找C:\Windows\
文件,但它也可能位于您计算机上的其他位置。因此,请检查C:\Windows\
和C:\php\
以及您可能已安装PHP的其他地方。
进行更改后,您可以从命令行检查结果,如下所示:
C:\php\php.exe -m
或(从重新启动Web服务器/计算机后)来自.phtml
文件,如下所示:
<? phpinfo(); ?>
这将输出已启用模块的列表,现在应包括 odbc ;如果没有,那么您可能修改了错误的php.ini
文件(继续查看)或忘记重新启动Web服务器/机器。
如果您有非标准安装,则可以使用如下的绝对路径:
extension=C:\php7x64\ext\php_odbc.dll
答案 2 :(得分:2)
打开php.ini文件并取消注释或添加以下行:
extension_dir = "C:\PHP\ext" ;<- your PHP path
extension=php_pdo_odbc.dll
extension=php_odbc.dll
重置互联网信息服务: 在具有管理员权限类型的命令提示符下:
iisreset
这解决了我的问题。
答案 3 :(得分:1)
作为Adrian B的另一个提及官方司机的补充,您还可以查看https://github.com/thomsonreuters/msphpsql 这是一个非官方的港口。但是目前存在局限性。
答案 4 :(得分:0)
我想你是对的,你需要为你的PHP客户端平台和操作系统下载SQL Server ODBC驱动程序。
以下是类似问题的链接:Call to undefined function odbc_connect()
您也可以尝试为MySQL安装此连接器(如果您使用MySQL):Connector/ODBC
或者如果您使用MSSQL:ODBC Driver 11 for SQL Server
答案 5 :(得分:0)
我们需要微软的x86驱动程序。 http://www.microsoft.com/ja-jp/download/details.aspx?id=13255 *对不起,'ja-jp'是我的。请选择你的国家。有2个驱动程序,一个是32位,但我们需要64位(x86)版本。 然后我们可以设置“ODBC数据源(64位)”。它出现在窗口上。 最后,检查您的网站。也许它有效。 3月29日。 2016年Naio
答案 6 :(得分:0)
我知道这个问题比较老。但是最近我遇到了同样的问题...
@Naio是正确的:根据体系结构(32位或64位),确实存在不同版本的ODBC驱动程序。 PHP使用的驱动程序取决于其自己的版本。
换句话说,如果您使用的是32位ODBC环境,请确保使用32位版本的PHP ...
我的猜测是,通过从PHP 5.6切换到PHP 7.0,您还从32位版本切换到了64位版本。