CLI, MSSQL, Could not found driver
- igor.pocta
- Člen | 100
Ahoj,
mám tu takový oříšek, denně potřebuji synchronizovat data s MSSQL serverem a tak jsem si nainstaloval do XAMPPu PHP PDO SQLSRV 56 spolu s MS ODBC 11 driverem.
V configu PHP.INI mám:
; MSSQL DRIVER
extension=php_pdo_sqlsrv_56_ts.dll
extension=php_sqlsrv_56_ts.dll
V modelu mám
<?php
namespace App\CoreModule\Model;
use App\Model\BaseService;
class SyncService extends BaseService
{
const TABLE_NAME_USER = "user";
public function syncData($db_name, $user, $password)
{
$data_source = 'sqlsrv:SERVER=SQLSERVER\PEARCON;DATABASE=' . $db_name;
try {
$dbh = new \PDO($data_source, $user, $password);
} catch (\PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$stmt = $dbh->prepare("SELECT * FROM v_data");
$stmt->execute();
while ($row = $stmt->fetch()) {
...
Když standardně přes web. prohlížeč spustím presenter s patřičnou akcí, všechno proběhne krásně, PDO se připojí k serveru, získá data a zpracuje. Když ale to samé spustím z příkazové řádky (protože to chci mít jako plánovanou úlohu), mám problém. Synchronizaci spouštím z BAT souboru s tímto příkazem
@echo off
php c:\xampp\htdocs\sandbox\www\index.php Core:Service:SyncData
a skončí chybou: Failed to get DB handle: could not find driver
Nenapadá vás, čím by to mohlo být? Jako backup řešení mám spouštění iexplore s parametrem webové stránky, která funguje ale to se mi nelíbí :)
Děkuji všem za pomoc,
I.
- David Matějka
- Moderator | 6445
CLI a web maji nekdy oddelene php.ini, tak koukni, jestli jich tam nemas vic.
- igor.pocta
- Člen | 100
Tak jsem na to přišel …
Předtím byl na serveru jiný webserver a s vsystémové proměnné PATH byla cesta k původnímu PHP.
XAMPP si pouštěl svůj správný ale když jsem volal příkaz php z CLI, tak ta odkazovala do původního webserveru. Odhaleno až pomocí Powershellu, který ukázal výstup z php -i celý a já zjistil cestu ke konfiguračnímu souboru :)
Davide, díky, motivoval jsi :)