Error using Cake PHP SQL Server Driver - php

Upgraded a (dev) Cake PHP site and had to change database drivers from ADO to SQL Server's own driver as ADO is no longer supported in Cake 1.3, I . The new SQL Server driver is installed in PHP, shows in PHPinfo() and should work, but when I try to load a page using the database, I get this error:
Warning (2): sqlsrv_query() expects parameter 1 to be resource, boolean given
[APP\plugins\datasources\models\datasources\dbo\dbo_sqlsrv.php, line 184]
Warning (512): SQL Error: An invalid parameter was passed to sqlsrv_query.
[CORE\cake\libs\model\datasources\dbo_source.php, line 684]
Query: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
What appears to be happening is my connection isn't established in the dbo_sqlsrv.php driver; a "$this->connection" variable is supposed to be the connection resource then passed to sqlsrv_query() and it's apparently a bool which is wrong (I tried to Echo the variable and it displays nothing).
This is where the connection SHOULD be set:
sqlsrv_connect($this->config['host'] . $port, $params)
Printing the variables that were passed in gives me this:
SRV, 1433 Array ( [Database] => DB [CharacterSet] => char
[MultipleActiveResultSets] => [UID] => sa [PWD] => password )
Each of those parameters is correct, is there a specific way I should format or change my database configuration array for this driver or is there something I am missing?

This error was due to outdated SQL Server drivers. Installing the latest from below allows a SQL Server connection:
http://www.microsoft.com/download/en/details.aspx?id=20098

I think there is some issue with your connection. PHP can't establish connection with sql Server.
var $default = array(
'driver' => 'sqlsrv',
'persistent' => false,
'host' => 'Myhome-PC\SQLEXPRESS', // or ip-address(192.168.1.13)
'login' => 'username',
'password' => 'password',
'database' => 'db',
'prefix' => 'tbl',
'port' => NULL,
'returnDatesAsStrings' => True
);
I think the Connection should be this
Here is the sqlsrv_dbo which I used.
And your $param should be something like this
$connectionInfo = array("UID" => $config['login'],
"PWD" => $config['password'],
"Database" => $config['database'],
'MultipleActiveResultSets' => 1,
'ConnectionPooling' => 0
);
if(isset($config['ReturnDatesAsStrings'])){
$connectionInfo['ReturnDatesAsStrings'] = $config['ReturnDatesAsStrings'];
}
$this->connection = sqlsrv_connect($config['host'] . $port, $connectionInfo);

Related

How to connect Eloquent to SQL Server?

I'm trying to connect Eloquent to my SQL Server DB.
But it keeps throwing me QueryException: SQLSTATE[HY000] unrecognized msgno (localhost) (severity 11) (SQL: select top 1 * from [groups] where [groups].[id] = -6)
I've tried executing this query and got SQL Error [208] [S0002]Then I rewrote this query to:
SELECT TOP 1 * FROM [db].[schema].[groups] WHERE [db].[schema].[groups].[id] = -6
and it executed correctly. After that I think that my configuration may be incorrect.
Here is my Eloquent/Capsule configuration:
[
"driver" => "sqlsrv",
"host" => "localhost",
"database" => "[db].[schema]",
"username" => "sa",
"password" => "dbpass",
"charset" => "utf8",
"collation" => "",
"prefix" => "",
];
SQL Server Version: Microsoft SQL Server 2019 (CTP2.2) - 15.0.1200.24 (X64) Dec 5 2018 16:51:26 Enterprise Edition (64-bit) on Linux (KDE neon)
Eloquent version: 5.6.28
PHP Version: 7.2.10
Don't name your database name "[db].[schema]",
Use the name of the database you're actually using.
If your database is named InfinteCarrots use
Also, have the host np:DOMAINNAME\SQLEXPRESS
"driver" => "sqlsrv",
"host" => "np:EEBOFFICE\\SQLEXPRESS";
"database" => "InfiniteCarrots",
These are the connection details I use at this moment to connect with SQL server on a windows server.
If you are connecting to a remote server you will want to use the domain name for it and have the connection set up to use encryption always.
'driver' => 'sqlsrv',
'host' => 'example.com',
'port' => 1433,
'database' => 'database_name',
'username' => 'database_user',
'password' => 'database_password',

PHP Solr connection issue

I have PHP-Solr extension version 1.0.3-alpha installed on my server. I'm initializing the connection using:
$options = array(
'hostname' => 'hostname',
'login' => '',
'password' => '',
'port' => '',
'path' => 'solr/core1');
$client = new SolrClient($options);
It returns the following object:
class SolrClient#17 (1) { private $_hashtable_index => int(13444) }
But whenever I try to run a query like:
$qryArray = 'key_id:123456';
$client->deleteByQuery($qryArray);
It throws an exception as follows:
Solr HTTP Error 7: 'Couldn't connect to server
Can anyone help me to find what would causing this issue?
I have tried var_dump($client->getDebug());, but it returns NULL.

Dokku deployed Silex can't find PdoServiceProvider

I have a project done with Silex, and I was using herrera-io/silex-pdo as the PDO provider, but I faced random crashes with socket errors (I connect to the DB via socket), since that lib is abandoned, I changed to csanquer/pdo-service-provider, and it works just fine on my localhost server, but when I deploy to remote, I get the following error:
PHP Fatal error: Class 'Csanquer\Silex\PdoServiceProvider\Provider\PdoServiceProvider' not found in /app/web/index.php on line 52
Here is the code around the line 52:
use Csanquer\Silex\PdoServiceProvider\Provider\PdoServiceProvider;
$app->register(
// you can customize services and options prefix with the provider first argument (default = 'pdo')
new PdoServiceProvider('pdo'), // Line 52
array(
'pdo.server' => array(
// PDO driver to use among : mysql, pgsql , oracle, mssql, sqlite, dblib
'driver' => 'mysql',
'host' => 'unix_socket=/app/mysqld.sock',
'dbname' => 'db_beta',
'port' => 3306,
'user' => 'user',
'password' => 'pass',
),
// optional PDO attributes used in PDO constructor 4th argument driver_options
// some PDO attributes can be used only as PDO driver_options
// see http://www.php.net/manual/fr/pdo.construct.php
'pdo.options' => array(
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
),
// optional PDO attributes set with PDO::setAttribute
// see http://www.php.net/manual/fr/pdo.setattribute.php
'pdo.attributes' => array(
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
),
)
);
Thanks in advance for any help, or any clue of what may be going wrong!
Turns out the problem was with the use instructions. To fix, simply change:
use Csanquer\Silex\PdoServiceProvider\Provider\PdoServiceProvider;
To:
use Csanquer\Silex\PdoServiceProvider\Provider\PDOServiceProvider;
And:
new PdoServiceProvider('pdo') To: new PDOServiceProvider('pdo')
Now it works!

ZF2 Zend\Paginator\Adapter\DbSelect on DB2 i Series

Im creating a Zend APIgility application REST service and having a problem with my fetchAll Mapper function.
I'm connecting to an IBM DB2 database running on an i Series server (AS/400) via DB2 Connect on a Windows Application Server.
My Connection is is made in my local.php as such:
return array(
'db' => array(
'driver' => 'IbmDb2',
'database' => $database,
'username' => $user,
'password' => $password,
'hostname' => $host,
'port' => $port,
'driver_options' => array(
'i5_naming' => DB2_I5_NAMING_ON,
'i5_lib' => 'LIBWEB',
),
),
);
The fetchAll() function in my Mapper class is:
public function fetchAll()
{
$select = new Select('WBRESOURCE');
$paginatorAdapter = new DbSelect($select, $this->adapter);
$collection = new ResourcesCollection($paginatorAdapter);
return $collection;
}
When I hit the DbSelect, ZF2 throws the following DB2 Connect error:
"[IBM][CLI Driver][AS] SQL0204N \"*LIBL.WBRESOURCE\" is an undefined name. SQLSTATE=42704"
Im not sure why its using *LIBL (user defined library list), since I defined the library (SCHEMA) to use as LIBWEB in my connection option.
Thanks in advance!
Rob
Try changing this section:
'driver_options' => array(
'i5_naming' => DB2_I5_NAMING_ON,
'i5_lib' => 'LIBWEB',
Change to":
'driver_options' => array(
'i5_naming' => DB2_I5_NAMING_OFF, <=== change
'i5_lib' => 'LIBWEB',
By using DB2_I5_NAMING_OFF, you should get SQL naming mode. The use of DB2 i5 naming mode will result in things like reliance on a job's library list.
See PHP: db2-connect for some info on the parameter.

jobberBase php installation is not working

I installed jobberBase using automatic installation (softaculous) on arvixe. As this was all automatic installation chances of any errors are rare. Still I did double checked that database got created fine; also the configuration looked fined.
I saw this errors on many other threads too but couldnt find a solution anywhere ; so looks like its a common installation problem. Most probably the php are not able to connect to DB ! Any help would be highly appreciated.
Warning: mysqli::mysqli() expects parameter 5 to be long, string given in /home/muskete3/public_html/jobber/_includes/class.Db.php on line 20
Warning: mysqli::query() [mysqli.query]: Couldn't fetch Db in /home/muskete3/public_html/jobber/_includes/class.Db.php on line 72
Warning: mysqli_error() [function.mysqli-error]: Couldn't fetch Db in /home/muskete3/public_html/jobber/_includes/class.Db.php on line 73
Warning: mysqli::query() [mysqli.query]: Couldn't fetch Db in /home/muskete3/public_html/jobber/_includes/class.Db.php on line 31
Warning: mysqli_error() [function.mysqli-error]: Couldn't fetch Db in /home/muskete3/public_html/jobber/_includes/class.Db.php on line 32
Fatal error: Call to a member function fetch_assoc() on a non-object in /home/muskete3/public_html/jobber/_includes/class.JobberSettings.php on line 23
My configuration file is :
<?php
/**
* Define environments
*
*/
// local (http://localhost/jobberbase/public)
$__instances['local'] = array(
// should be a unique part of the url (or the entire url if you wish)
'prefix' => 'www.jobs41.net',
// mysql credentials
'db_host' => 'localhost',
'db_port' => 3306,
'db_user' => '***',
'db_password' => '***',
'db_name' => '***',
'db_prefix' => '',
// your site's full url
'app_url' => 'http://www.jobs41.net/jobber/',
// error reporting
'ini_error_reporting' => E_ALL,
'ini_display_errors' => 'On',
// environment setting 1 (use 'local' for localhost/testing OR 'online' for live, production environment)
'location' => 'local',
// environment setting 2 (use 'dev' together with 'local' in the previous setting OR 'prod' with 'online')
'environment' => 'dev',
//'apache_mod_rewrite', 'iis_url_rewrite' -microsoft URL Rewrite module, 'iis_isapi_rewrite'
'rewrite_mode' => 'apache_mod_rewrite'
);
// live (http://www.yourjobberbasedomain.com)
$__instances['live'] = array(
'prefix' => 'www.jobs41.net',
'db_host' => 'localhost',
'db_port' => 3306,
'db_user' => 'muskete3_jobb563',
'db_password' => '6Sn82hxv7P',
'db_name' => 'muskete3_jobb563',
'db_prefix' => '',
'app_url' => 'http://www.jobs41.net/jobber/',
'ini_error_reporting' => E_ALL,
'ini_display_errors' => 'Off',
'location' => 'online',
'environment' => 'prod',
'rewrite_mode' => 'apache_mod_rewrite'
);
Previously I had installed it not as root directory; hence it was installed inside public_html/job.. Now when i installed it again in root directory it worked fine.

Categories