【发布时间】:2016-07-03 13:15:21
【问题描述】:
我在 CentOS 服务器上通过 unixODBC 和 FreeTDS 建立了到 Sybase DB 的连接。 (我不拥有 Sybase 服务器,我只有一个具有只读权限的帐户)
TL;DR:我可以同时连接odbc_pconnect 和 PDO,但是当我执行相同的查询时,odbc_pconnect 工作,而 PDO 返回错误
全文:我使用odbc_pconnect创建了一个简单的测试
$query = "select COUNT(*) from table_name";
$conn = odbc_pconnect("myDSN", 'myusername', 'mypassword');
if(!$conn)
die("Connection failed");
if($result = odbc_exec($conn, $query))
{
odbc_result_all($result);
}
上面的代码有效,我得到了我想要的计数。
然后我尝试使用 PDO
$connectionstring = "odbc:myDSN;";
try {
$db = new \PDO(
$connectionstring , 'myusername', 'mypassword');
} catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}
$rs = $db->query($query);
debug($db->errorInfo());
连接已建立(没有“连接失败”错误),但随后服务器返回错误:
[FreeTDS][SQL Server]ASA 错误 -121:权限被拒绝: 您无权使用“CREATE PROCEDURE”语句 (SQLExecute[262] at /builddir/build/BUILD/php-5.4.16/ext/pdo_odbc/odbc_stmt.c:254)
好吧,正如您所见,我的查询不会尝试创建任何过程
我尝试了不同的连接字符串,但结果没有改变
我猜问题出在我的 odbc 和 freeTDS 配置中,而不是 PHP 中。但问题仍然存在:为什么会有不同的行为?
edit 我在尝试从控制台访问数据源时发现了同样的问题:如果我尝试使用 tsql
tsql -S myDSN -U myusername -P mypassword
我可以执行查询。但是当我使用isql访问时:
isql -v myDSN myusername mypassword
我得到了和上面一样的错误:
[42501][FreeTDS][SQL Server]ASA 错误 -121:权限被拒绝:您没有使用“CREATE PROCEDURE”语句的权限 [ISQL]错误:无法执行 SQL
我猜是和this有关
PS 我正在使用 cakephp 3.1.11
【问题讨论】:
-
没有。我不知道它来自哪里
-
可能与this相关?
-
您可以分享这个
$query值吗? -
问题出在:这是一个简单的选择查询:
$query = "select COUNT(*) from table_name"; -
你检查过phpinfo,你是否安装/配置了pdo odbc驱动程序?
标签: php pdo sybase freetds unixodbc