PHP sql任何地方的连接问题

时间:2015-10-08 14:23:28

标签: php sybase sqlanywhere

我想使用PHP和模块SQLANYWHERE访问远程Sybase数据库。我安装了它并测试它是否正常工作:

if( ! extension_loaded('sqlanywhere') )  print("<b>SQL ANYWHRE not available</b>". "\xA") ;

如果我甚至可以像这样到达DB-Server,那我就试过了:

$host = 'xxx.xxx.xxx.xxx'; 
$port = xxxx; 
$waitTimeoutInSeconds = 1; 
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){   
   print("<b> SQL Verbindung established</b>". "\xA");
} else {
   print("<b>keine SQL not established</b>". "\xA");
} 
fclose($fp);

也有效。 但我只是无法连接,这是我的连接字符串:

$connString = "Uid=".$username.";Pwd=".$password.";CommLinks=tcpip(host‌​=".$server.";port=".$port.")";
$conn=sasql_connect($connString);

所有值都已正确配置,因为它在上面的第一次尝试中有效。

但是当我尝试加载页面时,我总是收到此错误:

Warning: sasql_connect(): SQLAnywhere: [-832] Verbindungsfehler: Fehler in den TCPIP Portoptionen in C:\xampp\htdocs\index.php on line 59
sasql_connect failed
Fatal error: Call to a member function close() on boolean in C:\xampp\htdocs\index.php on line 75

第一行表示“连接错误:TCPIP端口选项错误”

编辑:这些是我已经尝试的所有不同的connStrings:

$connString = "Uid=".$username.";Pwd=".$password.";Server=".$serverName.";host‌​=".$server.":".$port.")";
$connString = "Uid=".$username.";Pwd=".$password.";host‌​=".$server.":".$port.")";
$connString = "Uid=".$username.";Pwd=".$password.";host‌​=".$server.";port=".$port;
$connString = "Uid=".$username.";Pwd=".$password.";CommLinks=tcpip(host‌​=".$server.":".$port.")";
$connString = "Uid=".$username.";Pwd=".$password.";CommLinks=tcpip(host‌​=".$server."Port=".$port.")";

我发现PHP模块所需的SQL Anywhere安装包含一个名为dbping的cmdline工具。将我的字符串从我的文本编辑器复制到cmdline我注意到我的字符串中的不可打印字符,cmdline无法解析并将其打印为“??”。在重写字符所在的部分后,连接起作用。杀了我...... 2天就可以了。

2 个答案:

答案 0 :(得分:2)

错误非常自我解释;第59行是什么?是这一行:

$connString = "Uid=".$username.";Pwd=".$password.";CommLinks=tcpip(host‌​=".$server.";port=".$port.")";

基本上你的端口是不正确的。您还尝试在不存在的对象上调用close()方法。

我通读了一些文档(http://dcx.sybase.com/1200/en/dbadmin/links.html),看起来你的字符串看起来应该是这样的:

$connString = "Uid=".$username.";Pwd=".$password.";CommLinks=tcpip(host‌​=".$server.":".$port.")";

请注意,这会将端口附加到主机(主机:1337),而不是为其提供明确的port密钥。

答案 1 :(得分:0)

我认为这是连接数据库的问题。 只需尝试运行您的sqlanywhere数据库,如下所示:

./bin64/dbeng17 -x tcpip /path/to/database/database.db

此触发器&#34; -x tcpip&#34;将php与数据库连接起来非常重要。