微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐