Connecting OpenCart’s Database to Google Cloud SQL

Learn how to host OpenCart’s database on Google’s infrastructure using the new Cloud SQL service from the Google Cloud Platform for reliability, speed and automatic software patches.

I got an email from the Google Could Platform yesterday telling me that the Cloud SQL engine is now readily available worldwide so I thought I would give it a go and see how difficult it was to move OpenCart’s database to the cloud and run a version of the eCommerce store from Google’s infrastructure. Setting up the clod database and choosing your plan was very easy, where it gets tricky is where we need to import the database which I will give a bit of a guide to although if you are installing OpenCart from scratch it is much easier.

Google Cloud SQL is a newly available service which joins the Cloud Platform family. Using the same infrastructure which is responsible for keeping Google Search and GMail up (they go down so occasionally that people often think it is the end of the world!) developers can run their apps from the cloud which increases reliability, availability, speed and performance by replicating information across multiple databases and protecting against failing hardware which can cause downtime on traditional hosting accounts. You also get the benefit of automatic software patches applied to the MySQL software to cover vulnerabilities and bugs without having to worry about it.

In this blog I will be taking the OpenCart database and placing it into the Google Cloud SQL service. I’ll show you two different ways to do it, both with an existing store and as a new OpenCart installation. Please make sure you grab a copy of your database, if you have one, as you will need it later on in this OpenCart tutorial and make a copy of your account just in case.

Setting up your Google Cloud SQL instance

Kudos to Google for making the process so simple for creating your Cloud Databases although bear in mind you will need to have a registered card on the account before you can go ahead. You simply need to login to your current Google Account and then head over to the Google Developer Console where you will see a list of your projects (if you have any) and clicking the red button in the top left will let you create a new project which we will use for our test OpenCart installation. Just give your project a name and let Google generate a unique, random project ID.

Once that has finished processing, click on the Cloud SQL link in the left hand sidebar then click the red “New Instance” button. Now you will see a simple form to create the MySQL database, we will go through the steps here though just for an extra explanation on what they are for.

Instance ID

Here you can create a unique name which will be used to reference this particular database instance within your project. KEEP IT SECRET!

Region

Choose the default region to keep all of the data stored, the options I have are US and Europe but not sure if that is because I am based in the UK. Choose whichever you is relevant for your store, business and main customer-base.

Tier

This is the section where you can choose the level of resources that your database requires. Since I am just following this as a test, I will choose the lowest tier (D0) but have a word with your developer and web host to see how much your site is currently using to choose the right tier so your not paying too much but have enough power to manage your store. Bear in mind, one of the great things about cloud based databases is that you can change this tier at any point if you need a little extra juice.

Billing Plan

This depends on how busy and resource hungry your site is. For this test I just went with a Pay As You Go pricing model but if you have a lot of visitors you may save money with a billing plan.

Preferred Location

You can use this to choose a zone within your chosen country to keep data closest to your most active users. I left this as No Preference.

Backup Window

Have a look into your Analytics software and decide when the site is least busy and choose a window within that timeframe to perform backups.

Replication

I left this as Synchronous, simply for the reliability factor.

IP Address

For an extra $0.01 an hour you can have a dedicated IP address for your database which you are going to need. OpenCart requires a hostname, or IP Address, to connect to the database so in order to run an OpenCart database from the cloud you will need to have an IP allocated.

Authorised IP Address

You will need the IP address which your website runs on, this means that only your website can access the database, everything else will be rejected. Get in touch with your web host if you don’t know what this is.

Authorised App Engine Applications

This is for developers who have other projects in their developer console so leave this blank unless you know what it is for.

Then click submit and let it process, then you have a brand new MySQL database to use for your OpenCart store. The next step should be to change the root password to something more memorable for you to use, go into the developer console, select your database instance and click “Access Control”, from there you can choose a new root password.

Pointing phpMyAdmin to Google Cloud SQL

By default your webhost will likely have phpMyAdmin installed so you can follow this guide to point your application to use the Google Cloud SQL database instead of your own. Go into your web hosting account file manager and get to the phpMyAdmin config settings by going to the file:

  • phpmyadmin/libraries/config.default.php

Then, find the following variables and change them to your new Cloud Instance using the IP address which Google has assigned your database.

1
2
3
4
5
$cfg['Servers'][$i]['host'] = '[GOOGLE CLOUD SQL IP ADDRESS]';
$cfg['Servers'][$i]['user'] = '[DATABASE USERNAME - DEFAULT ROOT]';
$cfg['Servers'][$i]['password'] = '[DATABASE PASSWORD - YOU HAVE JUST CHANGED THIS]';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

OK, so now when you load up phpMyAdmin you will be connected to Google’s Cloud SQL database rather than the default web hosts and you can manage it through phpMyAdmin as you would normally. Bear in mind there are a few restrictions on the commands and privilege settings which shouldn’t affect you too much.

Installing A new Cloud Database-powered OpenCart

OK, in this example we will be assuming that you are installing a brand new OpenCart instance on your server. In which case simply follow the installation instructions as in the step below but make sure to enter the same hostname, username and password that you used in changing the phpMyAdmin config settings.

Then just let OpenCart do it’s thing and it will be using the new Cloud SQL database rather than the localhost one on your web hosting account.

Moving your existing OpenCart installation to use Cloud SQL

So, if you have a currently existing OpenCart store and you simply want to move the database into the cloud, log into your newly configured phpMyAdmin and simply use the database backup you took at the start of this tutorial and import it into your new Cloud SQL database using the import button along the top. Then you will need to edit the Database information inside your OpenCart store so open up your site in FTP and find the following files:

  • config.php
  • admin/config.php

All you need to do then is change the database connection settings (the hostname, username and password) to point towards your new Cloud SQL database rather than the localhost version and then you are good to go! By the way, the database driver is still “mysql” so you can leave that as it is.

Fonte: Connecting OpenCart’s Database to Google Cloud SQL | Cart Advisor

Vamos dar uns toques de SQL? VI

Vamos dar uns toques de SQL? VI

Criado por Pedro Pinto em 2 de Julho de 2011 | 0 comentários

Por Pedro Gaspar para o PPLWARE

Esta semana vamos aprender mais algumas funções novas, desta vez relacionadas com datas.

Vamos tentar descobrir a idade das pessoas que temos na nossa base de dados, aprender a fazer contas, entre outras coisas.

clip_image001

Para apresentar alguns exemplos utilizei a tabela que temos utilizando nas semanas anteriores (tlb_ppware) que contem os seguintes dados:

clip_image002

Começando pelo inicio, o sql é uma linguagem bastante abrangente, alem de nos permitir fazer operações com tabelas, tambem nos permite fazer operações matemáticas.

EXEMPLO1

Objectivo: Listar o nome e:

  • o valor do nascimento + 2
  • o valor do nascimento – 2
  • o valor do nascimento multiplicado por 2
  • o valor do nascimento dividido por 2

Query:

SELECT nome, nascimento +2 AS soma, nascimento -2 AS subtracao, nascimento *2 AS multiplicacao, nascimento /2 AS divisao
FROM tbl_ppware

Resultado:

clip_image004

Fazer contas com SQL e bastante fácil! Agora para complicar um pouco mais, vamos fazer contas com datas.

O próprio SQL consegue ir buscar a data actual ao sistema onde esta a ser executado, para ir buscar essa informação utilizamos a função NOW() (outras funções de data e hora podem ser consultadas aqui), a data é-nos apresentada no formato “ano-mês-dia hora:minuto:segundo”

Query:

SELECT NOW( )

Resultado:

clip_image006

Esta e a forma considerada universal de apresentar a data, e se pensar-mos bem até e a que faz mais sentido. No entanto como somos europeus e gostamos também bastante da nossa forma e-nos possível também alterar a forma como a data ira ser apresentada, para isso utilizamos a função DATE_FORMAT(), que nos permite mostrar a data de outra forma completamente a nossa escolha, podem consultar a informação completa sobre esta função aqui

EXEMPLO2

Objectivo: Apresentar a data no formato europeu

Query:

SELECT DATE_FORMAT( NOW( ) , "%d/%m/%y" ) AS DATA

Resultado:

clip_image008

Pegando novamente na nossa tabela vamos então calcular a idade das nossas pessoas ?

No lugar de utilizar o DATE_FORMAT para obter o ano actual (e assim calcular a idade) vou utilizar a funçãoYEAR(), esta função devolve-nos apenas o ano e serve plenamente para o nosso exemplo.

EXEMPLO3

Objectivo: Apresentar o nome e a idade das pessoas

Query:

SELECT nome, YEAR( NOW( ) ) - nascimento AS idade
FROM `tbl_ppware`

ou:

SELECT nome, DATE_FORMAT( NOW( ) , '%Y' ) - nascimento AS idade
FROM `tbl_ppware`

Resultado:

clip_image010

Assim como existe a função YEAR(), tambem existem a função DAY() para dias e MONTH() para meses, todas elas podem ser consultadas aqui

Com estas mesmas funções também podemos fazer contas com datas, por exemplo somar meses ou dias a uma determinada data

EXEMPLO4

Objectivo: Somar um dia, uma semana, um mês e um ano a data 21/12/2012, e apresenta-la por extenso (em inglês)

Primeiro que mais nada temos que converter esta data para um formato em que o SQL a reconheça, para isso utilizamos a função STR_TO_DATE()

Query:

SELECT DATE_FORMAT( STR_TO_DATE( '21/12/2012', '%d/%m/%Y' ) + INTERVAL 1
DAY + INTERVAL 1 WEEK + INTERVAL 1
MONTH + INTERVAL 1 YEAR, '%D %M of %Y' ) AS DATA

Resultado:

clip_image012

EXEMPLO5

Objectivo: Obter a media de idades das pessoas que temos na nossa base de dados

A media consiste em somar todos os elementos e no fim dividir pelo numero desses mesmos elementos, logo e isso mesmo que teremos que fazer, para obter a idade das pessoas que temos na nossa tabela vamos utilizar a mesma forma que utilizamos no EXEMPLO3, de seguida utilizaremos a função SUM(), para somar todos os resultados obtidos, e por fim dividimos pelo numero de elementos utilizados, para obter o numero desses exemplo usamos a função COUNT()

Query:

SELECT SUM( YEAR( NOW( ) ) - nascimento ) / COUNT( * ) AS media
FROM `tbl_ppware`

Resultado:

clip_image014

Espero que tenham gostado do artigo desta semana, para a semana há mais.

Vamos dar uns toques de SQL? V

Vamos dar uns toques de SQL? V

Criado por Pedro Pinto em 25 de Junho de 2011 | 7 comentários

Por Pedro Gaspar para o PPLWARE

Depois de termos aprendido algumas das funções mais básicas de sql, esta semana vamos aprender a agrupar resultados utilizando o DISTINCT e o GROUP, alem disso também vamos aprender a contar os resultados obtidos com recurso ao COUNTsql_00

Para apresentar alguns exemplos utilizei a tabela que temos vindo a usar nas ultimas semanas com os seguintes dados:

sql_01
Por vezes temos dados repetidos na nossa tabela e queremos que eles apareçam apenas uma vez na listagem, pois esta semana vamos aprender duas formas de o fazer
Começando pelo DISTINCT

Sintaxe de Utilização

SELECT DISTINCT nome_coluna(s)    
FROM nome_tabela

O DISTINCT é a forma mais simples de o fazer, mas também podemos utilizar o GROUP
Sintaxe de Utilização

SELECT nome_coluna(s)
FROM nome_tabela
GROUP BY coluna1 [, coluna2, coluna3]

Nada melhor para explicar todo o conceito do que utilizar alguns exemplos:

EXEMPLO1
Objectivo: Apresentar a lista de cores de cabelo
Query utilizando o DISTINCT:

SELECT DISTINCT cor_cabelo
FROM `tbl_ppware`

Query utilizando o GROUP:

SELECT cor_cabelo
FROM `tbl_ppware`
GROUP BY cor_cabelo

Resultado:

sql_ex1
Apesar de as duas funções apresentarem o mesmo resultado o seu funcionamento e totalmente diferente, sendo que com o GROUP conseguimos fazer queries muito mais complexas do que com o DISTINCT.

Vamos agora aprender a função COUNT para mais à frente utiliza-la em conjunto com o DISTINCT e o GROUP
O COUNT permite-nos contar o numero de registos de uma determinada coluna.

Sintaxe de utilização

SELECT COUNT(nome_coluna)
FROM nome_tabela

EXEMPLO2
Objectivo:
Apresentar o numero de registos que estão na tabela tbl_pplware
Query:

SELECT COUNT( * )
FROM `tbl_ppware`

(como não queremos seleccionar nenhum campo em particular podemos utilizar o ‘*’, mas poderíamos ter utilizado um campo qualquer para o efeito)
Resultado:

sql_ex2
Para não aparecer ‘COUNT(*)’ no nome do campo da query que acabamos de fazer podemos utilizar o AS de forma a dar o nome que quisermos ao campo, vejamos o mesmo exemplo mas utilizando o AS
Query:

SELECT COUNT( * ) AS total
FROM `tbl_ppware`

Resultado:

sql_ex3

EXEMPLO3
Objectivo: Apresentar o numero das diferentes cores de cabelo existentes
Query:

SELECT COUNT( DISTINCT cor_cabelo ) AS cores
FROM `tbl_ppware`

Resultado:

EXEMPLO4
Agora vamos juntar tudo o que aprendemos até este ponto.
Objectivo: Apresentar as cores de cabelo existentes e ao mesmo tempo mostrar quantas vezes existe cada uma
Query:

SELECT cor_cabelo, COUNT( * ) AS total
FROM `tbl_ppware`
GROUP BY cor_cabelo

Resultado:

sql_ex4
Espero que tenham gostado da explicação sobre sql desta semana, para a semana há mais.

Vamos dar uns toques em queries SQL?

Vamos dar uns toques em queries SQL?

Criado por Pedro Pinto em 28 de Maio de 2011 | 39 comentários

No âmbito de um projecto que estou a acompanhar, para desenvolvimento de um serviço Web desenvolvido em PHP e base de dados MySQL , lembrei-me que nunca tínhamos criado artigos com dicas sobre a linguagem SQL (Structured Query Language) no pplware. Nesse sentido, decidi arregaçar as mangas e, quem sabe, este não será o primeiro artigo de uma rubrica sobre SQL.

sql_00

Para quem não sabe, o SQL é uma das linguagens mais usadas no âmbito de aplicações que assentam em bases de dados. De uma forma muito simples, dentro de uma base de dados temos tabelas e dentro das tabelas temos registos. Imaginem por exemplo que têm uma base de dados com uma tabela que possui registos sobre pessoas. Essa tabela tem os campos (id_pessoa, nome, telefone, cor do cabelo, idade, morada). Através da linguagem SQL podemos efectuar queries (consultas) e saber por exemplo quantos registos temos na tabela, quantas pessoas têm o cabelo preto, quantas pessoas têm idade superior a 25 e inferior a 30, etc.

A linguagem SQL foi desenvolvida pela IBM em meados dos anos 70 e depois foi regulada por normas ANSI e ISO.De uma forma geral, através do SQL podemos eliminar, inserir e modificar registos numa base de dados relacional.

Está percebido para que serve a linguagem SQL? Espero que sim! Vamos agora começar por ensinar como usar o comando SELECT.

O comando SELECT permite seleccionar informação de uma ou várias tabelas.

Sintaxe de utilização
SELECT nome_campo FROM nome_tabela;

Para o presente exemplo, decidi criar uma base de dados com o nome db_pplware e com uma tabela com o nome tbl_pplware com os seguintes campos e dados:

tbl_00

Alguns exemplos

EXEMPLO 1

Objectivo: Seleccionar todos os dados

Query:

SELECT * FROM tbl_pplware;

Resultado: o resultado é o mesmo da tabela apresentada anteriormente.

EXEMPLO 2

Objectivo: Seleccionar apenas os nomes

Query:

SELECT nome FROM tbl_pplware;

Resultado

tbl_nome

EXEMPLO 3

Objectivo: Seleccionar nome e morada

Query

SELECT nome, morada FROM tbl_pplware;

Resultado

tbl_nome_morada

Deu para perceber? Se calhar, então o melhor mesmo para agora experimentar numa base de dados a sério. Para tal, o site w3schools.com disponibiliza um pequeno serviço onde podemos por em prática alguns comandos sobre SQL. Para testarem ó comando SELECT basta aceder ao serviço aqui e têm disponível a seguinte tabela para testarem as vossas queires.

tbl_000

Para finalizar, apenas gostava de saber qual a vossa opinião sobre esta rubrica. Parece-vos útil e importante? O objecto é começar do “zero” e ir apresentando alguns dos muitos comandos que a linguagem SQL disponibiliza. Aguardo o vosso feedback.

Artigos relacionados

Site do MySQL atacado via SQL Injection

Site do MySQL atacado via SQL Injection

Criado por Pedro Pinto em 29 de Março de 2011 | 42 comentários

Parece que o feitiço se virou contra o feiticeiro, mas segundo informação disponibilizadas no site Techie Buzz, a página oficial do projecto MySQL (motor de base de dados bastante popular) foi atacado através de um mecanismo denominado de SQLInjection (alguns sites referem que foram utilizados mecanismos mais elaborados como XSS e blind SQLi).

Ao que tudo indica, além do ataque ter sido efectuado com sucesso foram ainda “roubados” dados importantes da empresa. O ataque ao que consta foi realizado através de uma página de consulta de cliente, tendo já sido divulgadas algumas passwords, inclusive a de um Director de produtos do MySQL com apenas 4 dígitos. Algumas passwords de administradores do serviço blogs.mysql.com foram também já tornadas públicas.

sql_injection

Mas como funciona um ataque de SQL Injection?

O SQL injection tal como o nome indica é um mecanismo que permite  “injectar” instruções SQL dentro de uma consulta (query) realizada à base de dados. Desta forma, o hacker pode “construir” a query SQL e obter informações privilegiadas que se encontram guardadas na base de dados (ex. passwords de utilizadores).

Imaginem por exemplo um formulário HTML para autenticação de um utilizador num determinado site. Depois do utilizador carregar no botão enviar, é executado no MySQL a seguinte query SQL:

SELECT user,passwd FROM users WHERE user = 'pplware' AND passwd='123456'

Os dados user e passwd são passados via POST numa query do tipo:

SELECT user,passwd FROM users WHERE user = '$user' AND passwd='$passwd';

Agora imaginem que é um hacker e que no campo password colocou:

'123456';DROP TABLE users;

Neste caso a query ficava algo do tipo:

SELECT user,passwd FROM users WHERE user =  'pplware' AND passwd='123456';DROP table users;

Veja uma demonstração de como funciona o mecanismo SQL Injection:

Caso seja um utilizador com conta no site mysql.com é aconselhável que proceda rapidamente à alteração da sua password.

Tutorial C#–Inserção de dados em MySQL

Tutorial C# – Inserção de dados em MySQL

Criado por Hélio Moreira em 4 de Novembro de 2010 | 15 comentários

Na sequência de tutoriais anteriores, em que demonstrei como efectuar ligações entre o C# e bases de dados, hoje irei mostrar como inserir dados numa base de dados MySQL. Apesar de a ligação C# – MySQL não ser a mais utilizada, visto o C# ser uma linguagem mais orientada para o ambiente Windows, e o MySQL orientado para a Web, irão poder verificar que não existe nenhum “segredo”, e é até bastante simples a inserção de dados.

Antes de começar a ler este tutorial, é muito importante que tenha compreendido o anterior tutorial relacionado com este tema (Tutorial C# – Ligação a Base de Dados MySQL), visto que os primeiros passos são iguais.

Primeiro criamos uma base de dados no phpMyAdmin. Neste caso criei a base de dados com o nomepplware_bd.

Esta base de dados, terá uma tabela com o nome tabela_dados, com três campos:

  • id (INT (5), AUTO_INCREMENT, Chave Primária)
  • titulo (VARCHAR(25))
  • descricao (VARCHAR(100))

Para que seja possível inserir dados numa base de dados MySql em C#, é necessário adicionar a referência MySql.Data. Para isso é necessário efectuar o download do mysql-connector-net-6.2.3. Depois é só correr o setup. (No fim é necessário reiniciar o Visual Studio)

Para adicionar uma referência:

  • Clicar com o botão direito em Referência e fazer “Add Reference”.

  • Seleccionar na lista MySql.Data no separador .NET

  • Como a referência já está adicionada, temos de a inserir no código.
using MySql.Data.MySqlClient;

Agora vamos ao código

1º – Temos de adicionar um MySqlConnection, MySqlDataAdapter e um DataSet.

private MySqlConnection mConn;
private MySqlDataAdapter mAdapter;
private DataSet mDataSet;

O MySqlConnection, MySqlDataAdapter e o DataSet, são necessários para a conexão e leitura da base de dados.

2º – Criar o “layout” da mini aplicação.

3º – Código do botão “Gravar”

private void bt_Gravar_Click(object sender, EventArgs e)
{
	// Início da Conexão com indicação de qual o servidor, nome de base de dados e utilizar   /* É aconselhável criar um utilizador com password. Para acrescentar a password é somente
	necessário acrescentar o seguinte código a seguir ao uid=root;password=xxxxx*/   mConn = new MySqlConnection("Persist Security Info=False; server=localhost;database=pplware_bd;uid=root");   // Abre a conexão
	mConn.Open();   //Query SQL
	MySqlCommand command = new MySqlCommand("INSERT INTO tabela_dados (titulo,descricao)"+
	"VALUES('" + tb_titulo.Text + "','" + tb_descricao.Text + "')", mConn);   //Executa a Query SQL
	command.ExecuteNonQuery();   // Fecha a conexão
	mConn.Close();   //Mensagem de Sucesso
	MessageBox.Show("Gravado com Sucesso!","Informação",MessageBoxButtons.OK,MessageBoxIcon.Information);   // Método criado para que quando o registo é gravado, automaticamente a dataGridView efectue um "Refresh"
	mostraResultados();
}

4º – Código do método de visualização de dados

private void mostraResultados()
{
	mDataSet = new DataSet();
	mConn = new MySqlConnection("Persist Security Info=False; server=localhost;database=pplware_bd;uid=root");
    mConn.Open();   //cria um adapter utilizando a instrução SQL para aceder à tabela
    mAdapter = new MySqlDataAdapter("SELECT * FROM tabela_dados ORDER BY id", mConn);   //preenche o dataset através do adapter
    mAdapter.Fill(mDataSet, "tabela_dados");   //atribui o resultado à propriedade DataSource da dataGridView
    dataGridView1.DataSource = mDataSet;
    dataGridView1.DataMember = "tabela_dados";
}

Este método será “chamado” no botão Visualizar, como exemplificado na imagem abaixo.

private void bt_visualizar_Click(object sender, EventArgs e)
{
	mostraResultados();
}

E o resultado será:

E assim finalizamos este tutorial.

Como certamente verificaram, é extremamente simples fazer uma ligação e inserção com MySQL utilizando C#.
Espero que tenham gostado.

Download: Mysql Connector Net (6.2.3)
Homepage: MySql