Anyway, I have a MySQL in remote host (sample ip: 10.10.11.11), a database named fortesting and a table named testingone.
My question is how connect my elixir app to my MySQL database in remote host (ip: 10.10.11.11)? and run the query select * from fortesting where ticket= 1 AND ver= 1 AND os= 1? using for example simple_server.exs and not the interactive elixir?
It seems like you’re just getting started with Elixir, so you might want to check out Ecto which is used by most people in the Elixir community for working with SQL databases.
Yes, just starting on Elixir, so far I know just the basics of Phoenix-Elixir-Ecto and I’m still researching and acquiring knowledge on the links and guides provided by hexdocs.
But in this case I just want to know if I can or if its possible execute raw query straight using elixir without using the mix ecto.create or without creating a repo.
It is possible to use raw drivers? Yes.
Suppose you want to use on a simple, not phoenix project
creating a project using mix new my_app --sup will create the folders and the implementation of Application (the main entry point) which starts the supervision tree.
defmodule MyApp.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
def start(_type, _args) do
# List all child processes to be supervised
children = [
# Starts a worker by calling: MyApp.Worker.start_link(arg)
# {MyApp.Worker, arg}
]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end
end
Now the driver is just a “Worker” and we can start under the supervisor.
Add {:myxql, "~> 0.2.0"} to your dependencies and run mix deps.get, this is a new driver made for newer versions of mysql
Supports MySQL 5.7.10+, 8.0, and MariaDB 10.3
Now under the MyApp.Application.start/2 function we have the children list, there we will add the initialization for the driver.
Note that we add a key name to the options with value :mydb that is our identifier to use the same driver process in the application without the need to start/stop when a request comes.
Now on your controller action or any where you need, even on iex -S mix :
{:ok, result} = MyXQL.query(:mydb, "select * from database where ticket = ? and ver = ? and os = ?", [ticket_param, ver_param, os_param])
Performing the query with ? on the string allows the driver do the sanatization, preventing SQL Injection.
And thats it. For more infor on what you get from MyXQL.query/3 you can see the docs and the github repo