Я хочу получить доступ к удаленной базе данных Sybase с помощью PHP и модуля SQLANYWHERE. Я установил его и проверил, что он работает правильно так:
if( ! extension_loaded('sqlanywhere') ) print("<b>SQL ANYWHRE not available</b>". "\xA") ;
Затем я попытался получить доступ к DB-серверу вот так:
$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.")";
РЕШЕНИЕ
Я обнаружил, что для установки SQL Anywhere, необходимой для модуля PHP, есть инструмент cmdline, который называется dbping включен. скопировав мою строку из моего текстового редактора в строку cmdline, я заметил там, где в моей строке были непечатные символы, которые не удалось разрешить cmdline, и напечатал их как «??». после переписывания части, где были символы, соединение работает. убей меня … 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.")";
Обратите внимание, что это добавляет порт к хосту (host: 1337), вместо того, чтобы дать ему явный port
ключ.
Я думаю, что это проблема с подключением к базе данных.
Просто попробуйте запустить базу данных sqlanywhere следующим образом:
./bin64/dbeng17 -x tcpip /path/to/database/database.db
Этот триггер «-x tcpip» важен для соединения php с базой данных.