$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 [‘likesFour’]);正在返回字符串’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 [‘likesFour’]);回归’s:
因为你在stmt之前错过了美元符号,所以PHP认为你试图访问常量stmt而不是变量$stmt.由于您尚未定义该常量,因此假设您尝试访问字符串“stmt”,它将回退.对于字符串,索引必须是数字,因此PHP应该抛出“非法字符串偏移”警告,但会尝试通过将’likesFour’转换为整数(将为0)来为您修复它.
因此,var_dump(stmt [‘likesFour’])意味着与PHP的var_dump(“stmt”[0])完全相同,这就是你得到输出“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']);
}