Frage

Ich verändert habe einige meiner alten Abfragen, um die Mysqli-framework, um die Leistung zu verbessern.Alles funktioniert gut auf localhost, aber wenn ich es hochladen, um den webserver gibt es nichts.Nach dem anschließen habe ich auf Fehler überprüfen und es keine gibt.Ich habe auch überprüft die php-Module installiert und mysqli aktiviert ist.

Ich bin sicher, dass es wird eine Verbindung mit der Datenbank kein Fehler angezeigt.(wenn ich die Datenbank geändert name string gab es den Fehler)

Es gibt keine Ausgabe der Abfrage an den webserver, die wie folgt aussieht:

$mysqli = new mysqli("server", "user", "password");

if (mysqli_connect_errno()) {
   printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
   exit;
}

// Query used  
$query = "SELECT name FROM users WHERE id = ?";

if ($stmt = $mysqli->prepare("$query")) 
{

    // Specify parameters to replace '?'
    $stmt->bind_param("d", $id);  

    $stmt->execute();

    // bind variables to prepared statement 
    $stmt->bind_result($_userName);

    while ($stmt->fetch()) 
    {
          echo $_userName;
    }


    $stmt->close();
 }
}

//close connection 
$mysqli->close(); 

Als ich sagte, dieser code funktioniert perfekt auf meinem local-nur nicht online.Überprüft werden die Fehler-logs und es gibt nichts, was so alles Punkte, um eine gute Verbindung.Alle Tabellen vorhanden ist, als auch etc.Jemand irgendwelche Ideen, denn davon hat man mir stecken!Auch, wenn ich diese Arbeit, werden alle anderen Abfragen funktionieren noch?Oder muss ich Sie nutzen die mysqli-framework, wie gut?Vielen Dank im Voraus.

EDIT:

Ok Ive getan einige "Debuggen", um zu sehen, was passiert.Es gibt Daten in der Tabelle ich bin Abfragen, das der Abfrage entspricht.Ich habe die folgenden, um zu überprüfen die prepare-Anweisung:

echo "debug 1";

if ($stmt = $mysqli->prepare("$shiftQuery"))  
{

echo "debug 2";
printf("Error: %s.\n", $stmt->error);

etc...
}

Also im Grunde sollte es Ausgang "debug 1" vor die Aussage bereit ist (Was es tut).Dann, nachdem er ausgeben soll 'debug 2' und alle Fehler, die aufgetreten sind.

Das problem irgendwo hier ist, wie es nicht erreichen die debug-Linie 2 in der IF-Anweisung.Da die Verbindung, details sind in Ordnung, ich kann nicht wirklich erkennen, warum die $mysqli-Objekt nicht erstellt werden.Geben, dass jemand weitere Ideen???

vielen Dank

Keine korrekte Lösung

Andere Tipps

Jeder Aufruf einer mysqli / Anw Methode kann fehlschlagen. Sie sollten jede und jeder überprüfen.
Versuchen Sie es mit error_reporting (E_ALL) und vielleicht display_error = On

<?php
error_reporting(E_ALL); ini_set('display_errors', 1);

// passing database name as fourth parameter
$mysqli = new mysqli("server", "user", "password", 'dbname');
if (mysqli_connect_errno()) {
   printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
   exit;
}

// Query used  
$query = "SELECT name FROM users WHERE id = ?";

if ( false===($stmt=$mysqli->prepare("$query")) ) {
  echo 'mysqli::prepare failed: ', htmlspecialchars($mysqli->error);
  die;
}

// Specify parameters to replace '?'
$rc = $stmt->bind_param("d", $id);  
if ( !$rc ) {
  echo 'bind_param failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: execute()</pre>';
$rc = $stmt->execute();
if ( !$rc ) {
  echo 'execute failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: bind_result()</pre>';
// bind variables to prepared statement 
$rc = $stmt->bind_result($_userName);
if ( !$rc ) {
  echo 'bind_result failed: ', htmlspecialchars($stmt->error);
  die;
}

echo '<pre>Debug: fetch()</pre>';
while ($stmt->fetch()) 
{
  echo 'username: ', $_userName;
}
echo '<pre>Debug: stmt close()</pre>';
$stmt->close();

echo '<pre>Debug: mysqli close()</pre>';
$mysqli->close();

MySQL Benutzerberechtigung ist Host empfindlich - es von localhost und user1 aus anderen Host unterschiedlicher Erlaubnis gibt benutzer1 kann.

GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password';

Mysqli-framework verbessert die Leistung nicht.
Die Fehlerprüfung muss nicht nur getan werden, nachdem die Verbindung aber nach jeder Abfrage ausführen.

Check $stmt->error für Fehler
Oder versuchen Sie es zu überprüfen, throwed Ausnahme

Is Id eine ganze Zahl? Ich normalerweise meine Mysqli laufen wie

$sql = "SELECT name FROM users WHERE id = ?";
            if($stmt = $mysqli->mysqli->prepare($sql)){
              $stmt->bind_param("i", $id);
                    if($stmt->execute()){
                        $stmt->bind_result($name);
                        $stmt->store_result();
                        if($stmt->fetch()){
                            return $name;
                         }else{
                             return 'Not Found';
                         }      
                    }else{
                        return 'Execute Error';
                    }

            }else{
                return 'SQL Error';
            }

Ich hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top