【问题标题】:Call to undefined function App\Controller\sqlsrv_connect()调用未定义的函数 App\Controller\sqlsrv_connect()
【发布时间】:2020-07-13 01:10:00
【问题描述】:

我在我的服务器中安装了 sqlsrv 驱动程序,用于连接 MSSQL 数据库和我的 CakePHP 3.0 应用程序。但是当我尝试使用 sqlsrv_conect() 连接到数据库时,它会引发错误

调用未定义的函数 App\Controller\sqlsrv_connect()。

$connectionInfo = array("UID" => "*****", "pwd" => "*****", "Database" => "*****", "LoginTimeout" => 30, "Encrypt" => 1, "TrustServerCertificate" => 0);
$serverName = "tcp:bidb.database.windows.net,1433";
$conn = sqlsrv_connect($serverName, $connectionInfo);

php版本是PHP 7.0,安装了ODBC驱动和​​sqlsrv 5.3版本。我还想做别的吗?

【问题讨论】:

  • 好像没有安装驱动。见php.net/manual/en/book.sqlsrv.php
  • 是的,驱动已安装,检查phpinfo()时显示。
  • @VishnuSasidharan 您在phpinfo(). 输出中看到了什么?您需要找到 sqlsrv 部分,而不是 pdo_sqlsrv
  • 检查了服务器中存在的 phpinfo() sqlsrv

标签: php sql-server azure cakephp sqlsrv


【解决方案1】:

因为我们使用命名空间和自动加载您的应用程序在当前 php 类中寻找方法。

要调用核心 php 函数,您必须使用反斜杠调用 \

\sqlsrv_connect($serverName, $connectionInfo);

同时使用 composer cs-check && composer cs-fix 检查你的 cakephp 代码,同时尝试安装和使用 phpstan。

【讨论】:

  • 与类不同,对于函数和常量,你在技术上不一定需要这样做(但你应该这样做!),PHP 将首先在当前命名空间中查找,它找不到任何东西,它将在全局命名空间中查找,因此如果该函数存在,它将起作用。 php.net/manual/en/language.namespaces.fallback.php
  • 我同意你的观点,但根据我的经验,以上内容将消除问题中的错误。
  • 我已经尝试了上述方法仍然显示错误。我已经检查了 phpinfo() sqlsrv 是否安装在服务器上
  • @VishnuSasidharan 好的,阅读这个stackoverflow.com/questions/53041809/…
  • 我添加的版本兼容PHP 7.0 php_pdo_sqlsrv_7_ts 和 php_sqlsrv_7_ts
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 2016-04-09
  • 2012-11-22
  • 2016-01-23
  • 2014-03-27
  • 2017-11-24
  • 2019-04-02
  • 2016-09-08
相关资源
最近更新 更多