Jak vzít přístup k databázi z configu
- scientific
- Člen | 94
Ahoj všem,
chci udělat custom skript a použít v něm přihlašovací údaje k databázi z nette configu.
config.local.neon:
parameters:
database:
dsn: 'mysql:host=127.0.0.1;dbname=databaze'
user: 'uzivatel'
password: 'heslo'
options:
lazy: yes
services:
database: @Nette\Database\Context
// zde potřebuji něco, asi něco jako require config.local.neon co umí pracovat s JSON strukturou.
// asi bych to amatérsky řešil přes neco jako $json = json_decode(); $uzivatel = $json.database.uzivatel;
// A dbname nějakou upravou stringu $json.database.dsn :-D
$servername = "localhost";
$username = "$uzivatel";
$password = "$heslo";
$dbname = "$databaze";
Děkuji za tipy.
- scientific
- Člen | 94
Kód má být spouštěný cronem.
Má pouze číst jednu tabulku databáze.
Pokud v ní něco najde, tak odešle e-mail.
Banální skript, ale funguji cestou nejmenšího odporu, takže se chci vyhnout zkoumání, jak by se to asi řešilo přes Nette Framework. Raději bych těch pár řádků napsal během několika minut, něž zkoumal jak by se to řešilo přes Nette.
Moje představa může vypadat takto jednoduše:
<?php
$servername = $hostfromapp/config/config.local.neon;
$username = $usernamefromapp/config/config.local.neon;
$password = $passwordfromapp/config/config.local.neon;
$dbname = $databasefromapp/config/config.local.neon;
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
mail("admin@domain.example","reportuji toto: bla bla","reportuji tohle a tamto: ".$row['id']);
}
}
mysqli_close($conn);
?>
Editoval scientific (11. 10. 2021 16:26)
- Mysteria
- Člen | 797
Jestli to opravdu chceš řešit takhle prasácky, tak ti normálně stačí
Neon::decode(file_get_contents('/cesta/k/souboru.neon'))
a
výsledkem bude pole, podobně jako u JSONu, viz dokumentace: https://doc.nette.org/cs/neon#…
- jiri.pudil
- Nette Blogger | 1032
Popřípadě jestli to chceš řešit o trochu méně prasácky, můžeš si ve skriptu vytvořit kontejner (obdobným kódem jako standardně v aplikaci) a z něj si patřičné parametry nebo služby vytáhnout. Pokud vycházíš z web-projectu, tak třeba nějak přibližně takhle:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
$configurator = App\Bootstrap::boot();
$container = $configurator->createContainer();
$connection = $container->getByType(Nette\Database\Connection::class);
// ...
Asi nejméně prasácké řešení by pak bylo kupříkladu využít contributte/console a napsat si místo skriptu konzolový command.