Driver does not support this function
- richard
- Member | 60
I have a piece of code which works fine with PDO but does not work with the Nette:
<?php
$sql = "select * from db..table";
// this works OK
$dbh = new PDO('mssql:host=xxx;dbname=db','xxx','xxx');
$stmt = $dbh->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
// this does not work
$stmt = $this->database->prepare($sql);
$stmtt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
?>
config.neon
nette:
database:
dsn: ‘mssql:host=xxx;dbname=db’
user: xxx
password: xxx
Error: SQLSTATE[IM001]: Driver does not support this function: driver doesn't support meta data
With fetchAll() I get:
SQLSTATE[HY000]: General error: could not call class constructor
I have tried various things but I always get PDOExceptions. But with calling PDO class directly the same code works…
Last edited by richard (2013-03-29 15:03)
- Filip Procházka
- Moderator | 4668
Why not simply
$stmt = $this->database->query($sql);
foreach ($stmt as $row) {
dump($row);
}
Last edited by Filip Procházka (2013-03-29 15:47)
- richard
- Member | 60
Does not work.
Error: PDOException #IM001 SQLSTATE[IM001]: Driver does not support this
function: driver doesn't support meta data
<?php
// this works
$sql = "select * from TABLE";
$dbh = new PDO('mssql:host=xxx;dbname=DB','xxx','xxx');
$stmt = $dbh->query($sql);
foreach ($stmt as $row) {
dump($row);
}
// this has the error above
$sql = "select * from TABLE";
$stmt = $this->database->query($sql);
foreach ($stmt as $row) {
dump($row);
}
?>
- Filip Procházka
- Moderator | 4668
Oh, I see now – you're using mssql
, sorry about that. There
are clearly missing
some implementations, that might be important.
You should create an issue, or even better send a pullrequest, if you know how to solve this.
I've also found some older discussion on this topic, but unfortunatelly there is no solution provided.
I was googling a little, and It really seems like you shouldn't be using mssql with PDO, because it's just broken.
You should think about using better database, also read the warning on php.net
Last edited by Filip Procházka (2013-03-30 02:09)
- David Grudl
- Nette Core | 8218
As fix you can comment this line in file
Nette\Database\Drivers\MsSqlDriver.php
:
public function isSupported($item)
{
//return $item === self::SUPPORT_COLUMNS_META;
}
- richard
- Member | 60
Thank you both.
It works ok on the DB layer level. I am now running into more troubles with tweaking Nette, db layer, data grid and mssql. Mssql is not my choice, application is connecting to a DB filled by other system. I am opening a new topic on this – as this is rather to do with data grid now.
Thank you again.