Zwei Queries behindern sich auf Server aber nicht lokal

Spelmann

Erfahrenes Mitglied
Ich habe hier hintereinander zwei SQL-Queries die in dieser Reihenfolge lokal funktionieren aber nicht auf dem Server:
PHP:
$statement = 'SELECT COUNT(*) FROM `tl_figur`';
$checkTable = $db_link->prepare($statement);
$checkTable->execute();
$checkTable->bind_result($checkTable);
$checkTable->fetch(); //gibt mir die Anzahl der Datensätze in der DB aus

PHP:
//soll dann später an anderer Stelle ausgeführt werden, wenn $checkTable > 0
$query = "SELECT name FROM `tl_figur` ";
$stmt = $db_link->prepare($query) ;
$stmt->execute();
$stmt->bind_result($name);
while ($stmt->fetch()) {
    echo $name;
}
$stmt->close();
Fehler bei $stmt->execute();
Code:
Fatal error: Call to a member function execute() on boolean in...
Kommentiere ich jeweils eine Abfrage aus, funktioniert die andere.
Ändere ich die Reihenfolge (was inhaltlich aber keinen Sinn macht), funktionieren beide.
Kann mir jemand erklären warum das so ist und was ich tun kann?
 
Zuletzt bearbeitet:
Hi,

die Fehlermeldung besagt, dass du die methode "execute()" auf einem boolean ausführen willst. Somit schlägt in deinem zweiten Code-Teil das prepare() fehl.
Du hast überhaupt keine Fehlerbehandlung drin, füge mal folgendes nach dem prepare() ein:
PHP:
if($stmt === FALSE) {
  echo "PDO::errorCode(): ", $db_link->errorCode();
  echo "PDO::errorInfo(): ", $db_link->errorInfo();
}

Quellen:
http://de.php.net/manual/de/pdo.prepare.php
http://de.php.net/manual/de/pdo.errorcode.php
http://de.php.net/manual/de/pdo.errorinfo.php

Grüsse,
BK
 
@Yaslaw
In dem von Dir genannten Beispiel habe ich ja für das Problem auch keine Lösung gefunden. Ich hab's dann einfach ganz anders gemacht. Das hilft mir bei meinem neuen Problem doch aber nicht weiter oder?

@Bratkartoffel
Frage ich den Fehler wie von Dir vorgeschlagen ab, erhalte ich folgende Meldung:
Code:
PDO::errorCode(): Fatal error: Call to undefined method mysqli::errorCode()

Was ich prinzipiell schon mal nicht verstehe, wie kann den ein fataler Fehler auf dem Server ausgelöst werden, wenn es doch lokal funktioniert. Stehe völlig auf dem Schlauch.
 
Zuletzt bearbeitet:
Dann lautet der Fehler:
Code:
mysqli::errno: 2014mysqli::error: Commands out of sync; you can't run this command now
Da werdsch net schlau draus.
 
Kannst Du mir noch einen Anstoß geben wie ich mysqli_next_result() in meinem Code einsetzen muss?
So funktioniert es nicht:
PHP:
$stmt->mysqli_next_result(execute());
 
Nachtrag:
Das habe ich auch schon versucht:
PHP:
$checkTable->close();
Dann gibt es den Fehler:
Code:
Call to a member function close() on integer in...
 
Kommen wir zum ersten Post zurück:

PHP:
$statement = 'SELECT COUNT(*) FROM `tl_figur`';
$checkTable = $db_link->prepare($statement);
$checkTable->execute();
$checkTable->bind_result($checkTable);
$checkTable->fetch(); //gibt mir die Anzahl der Datensätze in der DB aus

Du bindest das Result in die Variable $checkTable. Diese Variable ist aber schon das Prepared-Statement-Objekt. Damit überschreibst du das Statement-Objekt mit dem Ergebnis des Queries. Somit kannst du auch nicht mehr close() auf dem Statement aufrufen. Fazit: Verwende für das Result-Binding eine andere Variable:

PHP:
$statement = 'SELECT COUNT(*) FROM `tl_figur`';
$checkTable = $db_link->prepare($statement);
$checkTable->execute();
$checkTable->bind_result($result);
$checkTable->fetch(); //gibt mir die Anzahl der Datensätze in der DB aus
$checkTable->close();

echo $result;
 
Zurück