PHP错误表中的所有值=’s’

我有这个代码.

$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']);
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...