Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有值=';s';在PHP中的表中出现错误_Php_Mysql - Fatal编程技术网

所有值=';s';在PHP中的表中出现错误

所有值=';s';在PHP中的表中出现错误,php,mysql,Php,Mysql,我有这个密码 $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']);

我有这个密码

$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['likedFour']);正在返回字符串“s”。为什么会这样

编辑(这是你告诉我的,但它不起作用): 当我运行这个脚本时,脚本在var_转储处停止

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_转储(stmt['likedFour')返回
's'
: 因为您在
stmt
之前缺少美元符号,所以PHP认为您试图访问常量
stmt
,而不是变量
$stmt
。由于您尚未定义该常量,它将退回到假定您正在尝试访问字符串“stmt”
。对于字符串,索引必须是数字,因此PHP应该向您抛出“非法字符串偏移”警告,但会尝试通过将
'likedFour'
转换为整数(即
0
)来修复它

因此,
var\u dump(stmt['likedFour'])
的意思与PHP的
var\u dump(“stmt”[0])
完全相同,这就是为什么您会得到输出
“s”
:来自
“stmt”
的第一个字符

如何获得您真正想要的结果: 首先需要从查询中检索结果行
$stmt
是用于执行查询和检索结果的
mysqli\u 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']);
}

由于您在
stmt
之前缺少
$
符号,因此您还需要实际从
$stmt
首先获取结果行我如何获取?
$row=$stmt->fetch_assoc();var_dump($row['likedFour'])
-
$stmt
只是
mysqli\u结果
对象,而不是表中的实际记录。@RonArel甚至php手册都会告诉您如何获取数据…
var\u转储(stmt
右边缺少一个重要字符。如果这是你的真实代码,你应该得到一个
未定义的stmt常量
通知。