У меня есть этот код.
$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']); }