MySQL InnoDB Table не работает на сервере 1 и 1, работает на localhost - PullRequest
0 голосов
/ 15 февраля 2012

РЕДАКТИРОВАТЬ

Я изменил таблицу на MyISAM, и это сработало.Кто-нибудь знает, почему InnoDB не будет работать, и если есть способ «включить» его?


По сути, я вставляю строку, могу ссылаться на новый идентификатор через$ mysqli-> insert_id, выберите строку, переведите ее в ассоциативный массив и верните ее.Сразу после этого в другой функции я пытаюсь выделить ее и ее не существует.Он также не существует в базе данных.Обновление просто не обновляет, а удаление просто не удаляет (хотя, когда я говорю, что $ stmt-> disabled_rows возвращает> 0).

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

Функция такова:

function addNews($title, $message) {
        $mysqli = open_mysqli();

        if ($stmt = $mysqli->prepare("INSERT INTO news(title, message) VALUES (?,?)")) {
            $stmt->bind_param("ss", $title, $message);
            $stmt->execute();
            $stmt->close();

            $id = $mysqli->insert_id;
            if ($stmt = $mysqli->prepare("SELECT * FROM news WHERE id=? LIMIT 1")) {
                $stmt->bind_param("i", $id);
                $stmt->execute();

                $meta = $stmt->result_metadata();
                while ($field = $meta->fetch_field()) { 
                    $params[] = &$row[$field->name]; 
                } 
                call_user_func_array(array($stmt, 'bind_result'), $params);                
                while ($stmt->fetch()) { 
                    foreach($row as $key => $val) { 
                        $c[$key] = $val; 
                    } 
                    $results[] = $c; 
                } 

                $stmt->close();
                $mysqli->close();

                if(isset($results) && $results) {
                    return sqlResultObj(true, $results[0]);
                } else {
                    return sqlErrorObj('No news with id '.$id);
                }
            }
        } else {
            return sqlErrorObj('Problem adding news.');
        }
    }

Единственное отличие таблиц, кромесами поля - это то, что продукт представляет собой InnoDB Storage Engine и имеет другие таблицы, ссылающиеся на него как на их внешний ключ, в то время как новости - это MyISAM, а не.

Как я уже сказал, это прекрасно работает на моем локальном сервере WAMP.(работает Apache 2.2.11, PHP 5.3.0, MySQL 5.1.36), но он представляет вышеуказанные проблемы на моем сервере 1and1 (PHP 5, MySQL 5, и у меня есть пакет для начинающих USA 1 & 1 Linux_WS ... не знаю, какая версияApache или где его найти).Любые идеи будут с благодарностью.

1 Ответ

0 голосов
/ 15 февраля 2012

Вы проверили состояние механизма InnoDB?

SHOW ENGINE INNODB STATUS

Возможно, вы уже сделали это, но проверьте разрешения, которые у вас есть для учетных данных пользователя.Убедитесь, что MySQL разрешен для вставки и удаления с использованием учетных данных пользователя, которые вы используете, и правильная настройка хоста (например,%, localhost и т. Д.)

...