Zend-F2: How to configure "Mysqli: The ext/mysqli driver" - mysql

I am using ZF v2.2. I am having a problem during database connectivity with "Mysqli: The ext/mysqli driver". Actually i am unable to figure out the process of "connecting to database & then using $sql->select(), $sql->update() etc".
Any idea how to configure this?
File: autoload/db.local.php
return array(
'db' => array(
'driver' => 'Mysqli',
'username' => 'root',
'password' => 'redhat',
'database' => 'mydb',
'host' => 'localhost'
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter',
),
),
);
public function indexAction() {
$db=$this->getServiceLocator()->get('db'); ` `echo $db->getDriver()->getConnection()->isConnected();
//**returns false**.
}

Related

How to change db name for yii2 Query Builder

iam using multiple databases for my yii2 project.In my config file, I have the configuration like
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db2',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
],
And i have a query like
$query = (new \yii\db\Query())
->select(['A.id', 'A.category_english', 'COUNT(B.category_id)'])
->from(['A' => 'tbl_categories', 'B' => $filteredData])
->where('A.id = B.category_id')
->groupBy(['A.id', 'A.category_english'])
->orderBy(['COUNT(B.category_id)'=>SORT_DESC]);
$data = $query->all();
The above query is fetching details from the first DB. How can I change that to the second? Where I can set the db name in query builder.

How can I add another database in my laravel project in heroku

I have my laravel project deployed in heroku, but I only migrated the database that I have created eg: users, news. But I have another database that is not migrated from my laravel project. Meaning, it is a existing database and I'm only connecting it on my project. In my development stage, I can connect the second database using my codes below. But now, I will deploy my project in heroku and I dont know how can I connect the second database because in heroku's postgresSQL you can only create and migrate the database based on the migration folder in laravel. I dont know how to upload an sql file in heroku's postgresSql and in that way I can connect the second database using the codes below. Is this possible in heroku? Because the second database is important in my landing page. It includes some few select query.
Here are some of my codes including the connection of the second database.
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:HoQcNyCc5KEGw4yjqpBIdKzTC+yeDoOJcerVMEVx+fs=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=adminpanel
DB_USERNAME=root
DB_PASSWORD=
DB_CONNECTION_SECOND=mysql2
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=ricjac8_orocoin
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=
database.php
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD','forge'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
GraphController.php - The one that has select query from my other database
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\DB;
use View;
use App\News;
use Charts;
use App\Graph;
use App\Roadmap;
class GraphController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$allroad = Roadmap::all();
$news = News::all();
//the second database query
$graphdetails = Graph::select()->where('id', 1)->get();
return view('coin.news',compact('news','graphdetails','allroad'));
}
}
graph.blade.php - the result of the select query being rendered in a chart
//other blade codes i didint include here.
#foreach ($graphdetails as $item)
#endforeach
chart.legend = new am4charts.Legend();
chart.data = [{
"tokens": "Sold Tokens",
"values": {{$item->total_tokens}} - {{$item->sales_token}}
},{
"tokens": "Unsold Tokens",
"values": {{$item->sales_token}}
}];
});
Graph.php model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Auth;
use Cache;
use Charts;
class Graph extends Model
{
//
protected $connection = 'mysql2';
protected $table = 'ico_stages';
protected $fillable = [
'name', 'start_date', 'end_date', 'total_tokens', 'base_price', 'min_purchase', 'max_purchase', 'soft_cap', 'hard_cap',
'display_mode','private','user_panel_display','sales_token','sales_amount','status',
];
}
Try another free shared hosting that uses MySQL. PostreSQL is a little bit different than MySQL.

How i can force an yii2 module to use a specific connection for all his models?

on a module I have add a component named db where i put, like the main Yii component, the data for database connection, I need in my module use everytime the db specified in his configuration for all models and not the main database connection, how I can do this?
You have several way eg. using a separated configuration in app/config/main.php
eg adding a specific dbMyMod to component config
return [
// ...
'components' => [
// ...
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'dbMyMod ' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=hostForMudle;dbname=module_db_name',
'username' => 'user_module_name',
'password' => 'password',
'charset' => 'utf8',
],
],
or one way that not require a static configuration in app/confing
could be based on a module function that return a proper db connection
public function myModuleDbCon()
{
$myDbCon = new yii\db\Connection([
'dsn' => 'mysql:host=localhost;dbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
return myDbConn;
}
then in you module you can retrive the module db connection
aDbConn = Yii::$app->getModule('my_module_name')->myModuleClass->myModuleDbCon();
.
$command = $aDbConn->createCommand('SELECT * FROM myTable');
$result= $command->queryAll();

How to debug flysystem

I install Yii 2 File kit extendsion, and set local file storage success.
Then i config SFTP then run command
Yii::$app->fileStorage1->getFilesystem()->createDir('demo')
So it not work. and only show result false.
So i don't know what the error.
I try conffig:
'fileStorage1' => [
'class' => '\trntv\filekit\Storage',
//'baseUrl' => '#storageUrl1',
//'filesystemComponent' => 'fs'
'filesystemComponent' => 'sftpFs'
],
'sftpFs' => [
'class' => 'creocoder\flysystem\SftpFilesystem',
'host' => 'Myserver',
'port' => 22,
'username' => 'u',
'password' => 'p',
//'privateKey' => '/path/to/or/contents/of/privatekey',
// 'timeout' => 60,
'root' => 'public_html',
// 'permPrivate' => 0700,
// 'permPublic' => 0744,
],

Laravel 4 artisan migrate install

I'm trying to migrate a very basic app from Laravel 3 to Laravel 4. It looks very easy but for some reason the following command is not working.
php artisan migrate:install
Following this tutorial: http://laravel.com/docs/quick#installation it seems like we don't need to install the artisan anymore. So I tried just running
php artisan migrate
But I always get the error
[ErrorException]
Undefined index: collation
My database.php:
'fetch' => PDO::FETCH_CLASS,
'default' => 'mysql',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__.'/../database/production.sqlite',
'prefix' => '',
),
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'wepromoters_db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
),
'pgsql' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => '',
'prefix' => '',
),
),
'redis' => array(
'cluster' => true,
'default' => array(
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
),
),
My migration:
public function up()
{
Schema::create('users',function($table){
$table->increments('id');
$table->string('email')->unique();
$table->string('password');
$table->string('type');
$table->timestamps();
});
}
Lastly the db is working fine with my Laravel 3 app
What is going on?
According to this thread on the Laravel forums, a collation parameter is now required in the database configuration.
Try it with this (notice the extra "collation" parameter after the "charset" one) :
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'wepromoters_db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
Laravel 4 is entirely different with Laravel 3, So use laravel 4 commands to migrate your table. I don't know exactly but you can try with this command:
php artisan make:migration create_users_table(Enter)
So, we created default users table and have to create our table:
php artisan make:migration create_YourTableName_table -- create YourTableName
Then, check your file in "migration/YourTableName.php" by opening it.
Now, you can write your code under the "Run Migration Block".
Finally, Run this command to migrate your table.
php artisan migrate
It will migrate your table with in span of time.