Php odbc_pconnect工作,但PDO给出错误消息
我在CentOS服务器上通过unixODBC和FreeTDS建立了与Sybase DB的连接。(我没有Sybase服务器,我只有一个具有只读权限的帐户) TL;DR:我可以使用Php odbc_pconnect工作,但PDO给出错误消息,php,pdo,sybase,freetds,unixodbc,Php,Pdo,Sybase,Freetds,Unixodbc,我在CentOS服务器上通过unixODBC和FreeTDS建立了与Sybase DB的连接。(我没有Sybase服务器,我只有一个具有只读权限的帐户) TL;DR:我可以使用odbc\u pconnect和PDO进行连接,但是当我执行相同的查询时odbc\u pconnect工作,而PDO返回错误 完整故事:我使用odbc\u pconnect $query = "select COUNT(*) from table_name"; $conn = odbc_pconnect("myDSN",
odbc\u pconnect
和PDO进行连接,但是当我执行相同的查询时odbc\u pconnect
工作,而PDO返回错误
完整故事:我使用odbc\u 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:权限被拒绝:
您没有使用“创建过程”语句的权限
(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:权限被拒绝:您没有使用“创建过程”语句的权限
[ISQL]错误:无法执行SQLExecute
我想这和
PS
我使用的是cakephp 3.1.11您可能无法创建过程,但cakephp可以在后台为您创建过程。如果您只有读取权限,则无法创建过程: 以下描述了创建过程的权限检查(也在创建扩展过程时),这些检查根据您的粒度权限设置而有所不同: 已启用粒度权限-您必须具有“创建过程”权限。您必须具有“创建任何过程”权限才能为其他用户运行创建过程 粒度权限已禁用-您必须是数据库所有者或具有“创建过程”权限
不知道。我不知道它来自何处可能与之相关?您可以分享这个
$query
值吗?问题在于:这是一个简单的选择查询:$query=“select COUNT(*)from table_name”代码>您是否检查了phpinfo,是否安装/配置了pdo odbc驱动程序?谢谢您的回答。从我的代码中可以看到,我没有使用cakePHP,但我直接使用PDO。当然,如果我使用cake的ORM(这就是我最终想要做的),我会得到与cake内部使用PDO相同的错误。你也链接了MySQL文档中的一个页面,但我想通过unixODBC和FreeTDSY连接到SyBase服务器。你是对的,但这是相似的,我将更新答案,因为我告诉过你我没有使用蛋糕ORM,所以它不是蛋糕创建过程:它必须是PDO或odbc驱动程序。我知道我需要拥有创建过程的特权,但问题是:为什么在我只想执行简单的SELECT查询时创建过程?这就是程序失败的原因:。(SQL\u未找到数据或SQL\u成功与信息)。如果没有完整的跟踪,我不确定代码上的错误在哪里。rc是SQLExecute(S->stmt)的产物;(第173行)这意味着您的陈述或查询可能是错误的。