我有这段代码。
form_authenticity_token
根据表UserData,likeFour应该等于'empty'。出于某种原因,var_dump(stmt ['likesFour']);正在返回字符串's'。这是为什么?
编辑(这是你告诉我要做的但是没有用): 当我运行它时,脚本停在var_dump。
$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']);
答案 0 :(得分:1)
var_dump(stmt['likedFour']);
会返回's'
:因为您在stmt
之前错过了美元符号,所以PHP认为您正在尝试访问常量 stmt
而不是变量 $stmt
。由于您尚未定义该常量,因此假设您尝试访问字符串 "stmt"
,它将回退。对于字符串,索引必须是数字,因此PHP应该向您抛出“非法字符串偏移”警告,但会尝试通过将'likedFour'
转换为整数(将为0
)来为您修复它。 / p>
因此,var_dump(stmt['likedFour'])
表示与var_dump("stmt"[0])
完全相同的PHP,这就是为什么你得到输出"s"
:来自"stmt"
的第一个字符。< / p>
首先需要从查询中检索结果行。 $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']);
}