所有值=';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常量
通知。