Pregunta

Me han cambiado algunos de mis viejos consultas al marco Mysqli para mejorar el rendimiento. Todo funciona bien en el servidor local, pero cuando me lo cargue en el servidor web que da salida a nada. Después de conectar puedo comprobar si hay errores y no hay ninguno. También comprobé los módulos instalados y php mysqli está habilitada.

Estoy seguro de que se crea una conexión con la base de datos no se muestran errores. (Cuando cambié la cadena de nombre de base de datos que dio el error)

No hay salida de la consulta en el servidor web, que se ve así:

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

Como dije este código funciona perfectamente en mi LocalServer no en línea. Comprobado los registros de errores y no hay nada por lo que todo apunta a una conexión buena. Todas las mesas existe, así etc Cualquier persona alguna idea porque éste me ha pegado! Además, si consigo este trabajo, lo hará el resto de mis consultas todavía trabajo? O necesitaré para hacerlos utilizan el marco mysqli así? Gracias de antemano.

EDIT:

Está bien que he hecho un poco de 'depuración' para ver lo que está sucediendo. Hay datos en la tabla que soy la consulta que coincide con la consulta. Hice lo siguiente para verificar el estado de la preparación:

echo "debug 1";

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

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

etc...
}

Así que, básicamente, se debe se prepara salida de 'depuración 1' antes de la DECLARACIÓN (que lo hace). A continuación, después de que se debe dar salida 'debug 2' y los errores que se produjeron.

El problema es aquí en alguna parte, ya que no alcanza el 2 línea de depuración en la sentencia if. Dado que los datos de conexión están bien, realmente no puedo ver por qué no sería creado el objeto mysqli $. Que cualquiera da ninguna más ideas ???

gracias

No hay solución correcta

Otros consejos

Cada llamada a un método mysqli / stmt puede fallar. Debe comprobar todos y cada uno.
Prueba con error_reporting (E_ALL) y quizá = display_error En

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

permiso de usuario MySQL es anfitrión sensible - puede dar usuario1 de localhost y usuario1 desde otro host diferente permiso.

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

marco Mysqli no mejora el rendimiento.
La comprobación de errores debe hacerse no sólo después de la conexión pero después de ejecutar cada consulta.

Comprobar $stmt->error de errores
O tratar de comprobar contra excepción Throwed

es un número entero Id? Normalmente me paso la mysqli como

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

Espero que ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top