Question

Je l'ai changé quelques-unes de mes anciennes requêtes au cadre Mysqli pour améliorer les performances. Tout fonctionne très bien sur localhost mais quand je le télécharger sur le serveur Web il sort rien. Après avoir connecté, je vérifie les erreurs et il n'y en a pas. J'ai aussi vérifié les modules php installés et mysqli est activé.

Je suis certain que cela crée une connexion à la base de données sans erreurs sont affichées. (Quand je l'ai changé la chaîne de nom de la base, il a donné l'erreur)

Il n'y a pas de sortie de la requête sur le serveur web, qui ressemble à ceci:

$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(); 

Comme je l'ai dit ce code fonctionne parfaitement sur mon localserver tout simplement pas en ligne. Vérifié les journaux d'erreurs et il n'y a rien de tout indique une bonne connexion. Toutes les tables existe aussi bien des idées etc. Toute personne parce que celui-ci m'a coincé! De plus, si je reçois ce travail, ce que toutes mes autres questions encore travailler? Ou dois-je les faire utiliser le cadre de mysqli ainsi? Merci à l'avance.

EDIT:

Ok Ive fait quelques « débogage » pour voir ce qui se passe. Il y a des données dans le tableau que je suis l'interrogation qui correspond à la requête. Je l'ai fait comme suit pour vérifier l'instruction de préparation:

echo "debug 1";

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

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

etc...
}

Donc, fondamentalement, il doit envoyer debug 1 'avant la statment est préparé (ce qu'il fait). Ensuite, après la sortie devrait « debug 2 » et des erreurs qui se sont produits.

Le problème est ici quelque part car il ne marche pas atteindre la ligne debug 2 dans l'instruction IF. Étant donné que les détails de connexion sont très bien, je ne peux pas vraiment voir pourquoi l'objet mysqli $ wouldnt être créé. Cela donne quelqu'un d'autres idées ???

Merci

Pas de solution correcte

Autres conseils

Chaque appel à une méthode mysqli / stmt peut échouer. Vous devriez vérifier chacun.
Essayez avec error_reporting (E_ALL) et peut-être display_error = Sur

<?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();

l'autorisation de l'utilisateur MySQL est l'hôte sensible - il peut donner user1 de localhost et user1 d'autres hôte différent autorisation.

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

cadre Mysqli n'améliore pas les performances.
La vérification des erreurs doit être effectuée non seulement après la connexion, mais après chaque requête exécuter.

Vérifier $stmt->error des erreurs
Ou essayez de vérifier contre Throwed exception

est Id un entier? Je lance normalement mon mysqli comme

$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';
            }

L'espoir qui aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top