Intereting Posts
Yii2: Как поместить нулевые значения в конец списка объектов при сортировке по возрастанию? Код ответа HTTP после перенаправления PHP-массив с числовыми ключами как строка не может использоваться Как создать последовательную хэш-функцию Как добавить пользовательские шрифты в TCPDF? Проблема перенаправления PHP-страницы – Невозможно изменить информацию заголовка Как я могу использовать базовую HTTP-аутентификацию в PHP? Получить значение reCaptcha через javascript? phpstorm xdebug с проектом symfony2 Тег HTML5 для отображения подсветки синтаксиса Динамическое создание / вставка в ассоциативный массив в PHP вставить массив в таблицу, используя для цикла пытаясь разобрать xml с URL-адреса, и он не будет работать Как изменить минимальную стабильность только для одного пакета в Composer Использование точки вместо запятой при отображении десятичного числа

Все значения = 's' в таблице в ошибке PHP

У меня есть этот код.

$stmt = $conn->prepare("SELECT * FROM UserData WHERE username = ?"); $stmt->bind_param('s',$username); //$username = $_POST["username"]; $username ="netsgets"; $stmt->execute(); $stmt->store_result(); var_dump(stmt['likedFour']); 

Согласно таблице UserData, likeFour должен равняться 'empty'. По какой-то причине var_dump (stmt ['lovedFour']); возвращает строку 's'. Почему это?

Изменить (это то, что вы мне сказали, но это не работает): когда я запускаю это, скрипт останавливается на var_dump.

 require "conn.php"; echo "debug 1"; $stmt = $conn->prepare("SELECT * FROM UserData WHERE username = ?"); $stmt->bind_param('s',$username); //$username = $_POST["username"]; $username ="netsgets"; $stmt->execute(); $row = $stmt->fetch_assoc(); var_dump($row['likedFour']); 

Почему var_dump(stmt['likedFour']); return 's' :

Поскольку вам не хватает знака доллара перед stmt , поэтому PHP думает, что вы пытаетесь получить доступ к константе stmt вместо переменной $stmt . Поскольку вы не определили эту константу, она вернется к предположению, что вы пытаетесь получить доступ к строке "stmt" . Для строк индексы должны быть числовыми, поэтому PHP должен вызывать предупреждение «Недопустимое смещение строки», но попытается исправить его для вас, 'likedFour' на целое число (которое будет равно 0 ).

Таким образом, var_dump(stmt['likedFour']) означает то же самое, что и var_dump("stmt"[0]) для PHP, поэтому вы получаете выходные данные "s" : первый символ из "stmt" .

Как получить результат, который вы действительно хотите:

Сначала вам нужно получить полученные строки из вашего запроса. $stmt – это объект mysqli_stmt , который используется для выполнения запроса и получения результатов, но это не сам результат.

Чтобы сохранить головные боли в будущем, всегда проверяйте, был ли ваш запрос выполнен даже успешно, прежде чем пытаться получить результаты. Затем выберите строку данных:

 $success = $stmt->execute(); if (!$success) { echo $stmt->error; } else if ($stmt->num_rows == 0) { echo 'No results matching that username'; } else { $result = $stmt->get_result(); $row = $result->fetch_assoc(); var_dump($row['likedFour']); } 

Если вы не знаете, сколько строк будет возвращено, пройдите через них, чтобы быть в безопасности:

 $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { var_dump($row['likedFour']); }