MySQL возвращает только первый символ полей, но отлично работает на локальном

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

Я нашел подобный вопрос здесь, но мне не удалось найти ответ:
https://stackoverflow.com/questions/10507848/mysql-query-returns-only-the-first-letter-of-strings-only-when-page-is-viewed-on

    // Log Table Query
unset($stmt);
$stmt = $db->stmt_init();
$stmt = $db->prepare( "SELECT * FROM logs ORDER BY `id` DESC" );

$stmt->store_result();
$stmt->bind_result($r_id, $r_time, $r_logger, $r_message, $r_category);
$stmt->execute();

while( $stmt->fetch() )
{
var_dump($r_message);
var_dump($r_category);
}

$stmt->close();

Это выводит на localhost, например:

string (5) «Hello» String (3) «Корова»

Но на живом сервере:

строка (1) «H» строка (1) «C»

Есть идеи?

редактировать

Я думаю, что это относится только к строковым типам. Целочисленные типы возвращают, например:

Int (2893)

5

Решение

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

1. Вы позвонили store_result() перед звонком execute(), Согласно http://php.net/manual/en/mysqli-stmt.store-result.php execute() должен быть вызван первым.

Посмотрите мой код, это может решить вашу проблему:

    /* unsetting doesn't matter you're
going to overwrite it anyway */
unset($stmt);

/* you dont need to initialize $stmt with $db->stmt_init(),
$db->prepare() method will create it for you */
$stmt = $db->stmt_init();
$stmt = $db->prepare("SELECT * FROM logs ORDER BY `id` DESC");

/* execute the query first before storing
the result and binding it your variables */
if (!$stmt->execute()) {
echo "query execution error";
exit();
}

/* store the result */
$stmt->store_result();

/* then bind your variables */
$stmt->bind_result($r_id, $r_time, $r_logger, $r_message, $r_category);

/* fetch data and display */
while($stmt->fetch()) {
var_dump($r_message);
var_dump($r_category);
}

$stmt->close();

Дайте мне знать, если это решило вашу проблему.

Кроме того, вы можете использовать прямой путь, так как вы не даете никаких входных параметров, таких как WHERE first_name LIKE <input here> на ваш запрос:

    $result = $db->query("SELECT * FROM logs ORDER BY `id` DESC");

if ($result === false) {
echo "query execution error";
exit();
}

/* You can use either MYSQLI_NUM or MYSQLI_ASSOC os MYSQLI_BOTH
see php.net for more info */
echo "<pre>";
while($line = $result->fetch_array(MYSQLI_NUM)) {
print_r($line);
echo "\n";
}
echo "</pre>";
6

Другие решения

Как указано в вопросе, который вы связали, попробуйте код без unset($stmt) а также $stmt = db->stmt_init() Вместо этого вы можете использовать free_result()

// Log Table Query
$stmt->free_result(); //Free old results first
$stmt = $db->prepare( "SELECT * FROM logs ORDER BY `id` DESC" );

$stmt->store_result();
$stmt->bind_result($r_id, $r_time, $r_logger, $r_message, $r_category);
$stmt->execute();

while( $stmt->fetch() )
{
var_dump($r_message);
var_dump($r_category);
}

$stmt->close();
0

По вопросам рекламы [email protected]