Mysqli-запрос работает только на локальном хосте, а не на веб-сервере - PullRequest
0 голосов
/ 30 марта 2010

Я изменил некоторые из моих старых запросов на платформу Mysqli для повышения производительности. На localhost все работает нормально, но когда я загружаю его на веб-сервер, он ничего не выводит. После подключения проверяю на ошибки и их нет. Я также проверил установленные модули php и включил mysqli.

Я уверен, что он создает соединение с базой данных, поскольку ошибки не отображаются. (когда я изменил строку имени базы данных, это дало ошибку)

Нет запроса на веб-сервере, который выглядит следующим образом:

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

Как я уже сказал, этот код прекрасно работает на моем локальном сервере, но не в сети. Проверил журналы ошибок и ничего нет, поэтому все указывает на хорошее соединение. Также существуют все таблицы и т. Д. У кого-нибудь есть идеи, потому что этот застрял! Кроме того, если я получу эту работу, все остальные мои запросы все еще будут работать? Или мне нужно будет заставить их использовать среду mysqli? Заранее спасибо.

EDIT:

Хорошо, я сделал некоторую «отладку», чтобы посмотреть, что происходит. В таблице есть данные, к которым я обращаюсь, которые соответствуют запросу. Чтобы проверить оператор подготовки, я сделал следующее:

echo "debug 1";

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

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

etc...
}

Таким образом, в основном он должен вывести «debug 1» до того, как будет подготовлен устав (что он и делает). Затем после него выведите «debug 2» и все ошибки, которые произошли.

Проблема здесь где-то, поскольку она не достигает строки отладки 2 в операторе IF. Поскольку детали подключения в порядке, я не могу понять, почему объект $ mysqli не будет создан. Что дать кому-нибудь дальнейшие идеи ???

спасибо

Ответы [ 4 ]

2 голосов
/ 30 марта 2010

Каждый вызов метода mysqli / stmt может завершиться ошибкой. Вы должны проверить всех и каждого.
Попробуйте сделать это с помощью error_reporting (E_ALL) и, возможно, display_error = On

<code><?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()
'; $ rc = $ stmt-> execute (); if (! $ rc) { echo 'выполнить не удалось:', htmlspecialchars ($ stmt-> error); умереть; } echo '
Debug: bind_result()
'; // привязать переменные к подготовленному выражению $ rc = $ stmt-> bind_result ($ _ userName); if (! $ rc) { echo 'bind_result fail:', htmlspecialchars ($ stmt-> error); умереть; } echo '
Debug: fetch()
'; while ($ stmt-> fetch ()) { echo 'username:', $ _userName; } echo '
Debug: stmt close()
'; $ Stmt-> близко (); echo '
Debug: mysqli close()
'; $ Mysqli-> близко ();
1 голос
/ 30 марта 2010

Разрешение пользователя MySQL чувствительно к хосту - оно может давать другому пользователю user1 от localhost и user1 от другого хоста.

GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password';
0 голосов
/ 06 февраля 2016

Является ли Id целым числом? Я обычно запускаю свой mysqli как

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

Надеюсь, что поможет

0 голосов
/ 30 марта 2010

Mysqli Framework не улучшает производительность.
Проверка ошибок должна выполняться не только после подключения, но и после выполнения каждого запроса.

Проверка $stmt->error на ошибки
Или попробуйте проверить на исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...