Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php odbc_pconnect工作,但PDO给出错误消息_Php_Pdo_Sybase_Freetds_Unixodbc - Fatal编程技术网

Php odbc_pconnect工作,但PDO给出错误消息

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",

我在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", '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行)这意味着您的陈述或查询可能是错误的。