APF-Tracker

Adventure PHP Framework Issue Management


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000305Adventure PHP FrameworkBugpublic2016-07-05 03:312016-07-30 10:39
Reporterthalo1 
Assigned ToChristianAchatz 
PrioritynormalSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
Product Version3.2 
Target Version3.3Fixed in Version3.3 
Summary0000305: Error bei Nutzung von executeTextBindStatement
DescriptionBei Nutzung von MySQLiHandler::executeTextBindStatement tritt folgender Fehler auf: Call to undefined method mysqli_stmt::more_results()
Steps To Reproduce$cM = $this->getServiceObject('APF\core\database\ConnectionManager');
$db = $cM->getConnection('MySQLi');

$sql = 'SELECT * FROM example WHERE id = ?';
$db->executeTextBindStatement($sql, [$id]);
Tagsdatabase
Codereferenz: ([Datei]:[Zeile])core/database/MySQLiHandler.php:300
Namespacecore
Attached Files

- Relationships

-  Notes
(0000726)
ChristianAchatz (administrator)
2016-07-05 21:29

Hallo Thalo,

vielen Dank für die Meldung! Ich schaue mir das Thema an und gebe dir baldmöglichst Feedback!

Christian
(0000727)
ChristianAchatz (administrator)
2016-07-07 12:25

Hallo Thalo,

die API hat sich an dieser Stelle nicht geändert. Ich schaue mir das im Debugger nochmal genauer an.

Christian
(0000728)
ChristianAchatz (administrator)
2016-07-08 21:44

Hallo Thalo,

ich habe mir das Problem lokal nochmal genauer angesehen und kann den Fehler leider nicht nachvollziehen.

Setup:
======

class MySQLiHandlerTest extends \PHPUnit_Framework_TestCase {

   public function testPhpVersion() {
      echo 'PHP version: ' . phpversion() . PHP_EOL . PHP_EOL;
   }

   public function testSimpleBindStatement() {

      $conn = $this->getConnection();

      $sql = 'SELECT * FROM example WHERE id = ?';
      $result = $conn->executeTextBindStatement($sql, [1]);

      echo 'Statement result: ' . PHP_EOL;
      print_r($result);

   }

   /**
    * @return MySQLiHandler
    */
   private function getConnection() {
      $conn = new MySQLiHandler();
      $conn->setHost('127.0.0.1');
      $conn->setUser('root');
      $conn->setPass('');
      $conn->setDatabaseName('test');
      $conn->setup();

      return $conn;
   }

   public function testSimpleBindStatement2() {

      $conn = $this->getConnection();

      $sql = 'SELECT * FROM example_empty WHERE id = ?';
      $result = $conn->executeTextBindStatement($sql, [1]);

      echo 'Statement result: ' . PHP_EOL;
      print_r($result);

   }

}

Tabellen:
=========

CREATE TABLE `example` (
  `id` int(10) NOT NULL,
  `text` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `example_empty` (
  `id` int(10) NOT NULL,
  `text` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


Inhalte:
========
SELECT * FROM test.example_empty;
-

SELECT * FROM test.example;
id | text
1 | Foo
2 | Bar


Ausgabe für PHP 5.6:
====================

PHPUnit 5.2.12 by Sebastian Bergmann and contributors.

PHP version: 5.6.12

Statement result:
Array
(
    [0] => Array
        (
            [id] => 1
            [text] => Foo
        )

)
Statement result:
Array
(
)


Ausgabe für PHP 7.0:
====================

PHPUnit 5.2.12 by Sebastian Bergmann and contributors.

PHP version: 7.0.8

Statement result:
Array
(
    [0] => Array
        (
            [id] => 1
            [text] => Foo
        )

)
Statement result:
Array
(
)


Kannst du bitte deine genaue PHP-Version und dein Statement posten, damit ich mir das an Hand dessen nochmal genauer ansehen kann? Ich vermute aktuell, dass das Ausführen des Statements schief geht und daher keine weiteren Ergebnisse abgeholt werden können. Letzteres passiert beim Ausführen von Bind-Statements automatisch.
(0000729)
thalo1 (reporter)
2016-07-08 23:25
edited on: 2016-07-08 23:33

Hallo Christian,

laut https://secure.php.net/manual/de/mysqli-stmt.more-results.php: [^]

Ausschließlich native MySQL-Treiber

Nur in mysqlnd verfügbar.

...läuft. |-) (mysqli + mysqlnd Erweiterung)

The MySQL database extensions MySQL extension, mysqli and PDO MYSQL all communicate with the MySQL server. In the past, this was done by the extension using the services provided by the MySQL Client Library. The extensions were compiled against the MySQL Client Library in order to use its client-server protocol.

With MySQL Native Driver there is now an alternative, as the MySQL database extensions can be compiled to use MySQL Native Driver instead of the MySQL Client Library.

Vielleicht noch einen Hinweis in die Doku?

(0000730)
ChristianAchatz (administrator)
2016-07-09 23:17

Hi,

das könnte es in der Tat sein. Ich nehme nach meinem Urlaub einen Hinweis in die Doku auf.

Viele Grüße,
Christian
(0000737)
ChristianAchatz (administrator)
2016-07-30 10:39

Added hint to docs. See changes under https://github.com/AdventurePHP/docs/commit/ecf991ae424749f6c2ecf46942948817dd6c04fc. [^]

- Issue History
Date Modified Username Field Change
2016-07-05 03:31 thalo1 New Issue
2016-07-05 03:33 thalo1 Tag Attached: database
2016-07-05 21:29 ChristianAchatz Note Added: 0000726
2016-07-05 21:29 ChristianAchatz Assigned To => ChristianAchatz
2016-07-05 21:29 ChristianAchatz Status new => assigned
2016-07-07 12:25 ChristianAchatz Note Added: 0000727
2016-07-08 21:44 ChristianAchatz Note Added: 0000728
2016-07-08 21:44 ChristianAchatz Status assigned => feedback
2016-07-08 23:25 thalo1 Note Added: 0000729
2016-07-08 23:25 thalo1 Status feedback => assigned
2016-07-08 23:32 thalo1 Note Edited: 0000729 View Revisions
2016-07-08 23:33 thalo1 Note Edited: 0000729 View Revisions
2016-07-09 23:17 ChristianAchatz Note Added: 0000730
2016-07-30 10:39 ChristianAchatz Note Added: 0000737
2016-07-30 10:39 ChristianAchatz Fixed in Version => 3.3
2016-07-30 10:39 ChristianAchatz Target Version => 3.3
2016-07-30 10:39 ChristianAchatz Status assigned => resolved
2016-07-30 10:39 ChristianAchatz Resolution open => fixed


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker