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

时间:2017-08-09 18:48:43

标签: php mysql

我有这段代码。

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

1 个答案:

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