Internet搜索告诉我使用cursor.fetchone()作为从python中的SQL数据库获取特定行的方法。但是当我使用它时,我得到一个无。我很确定那里有东西,所以我很困惑为什么会这样。 这是一些代码
<?php
include 'header.php';
session_start();
//kick none users off the page
if(isset($_SESSION["UserID"])) {
}
else {
header('Location:login.php');
}
//Display the user info
$user = $_SESSION[UserID];
$results = $con->query("select * from users where UserID='$user'");
$row = $results->fetch_array(MYSQLI_BOTH);
session_start();
$_SESSION["FirstName"] = $row['FirstName'];
$_SESSION["LastName"] = $row['LastName'];
$_SESSION["Email"] = $row['Email'];
$_SESSION["Password"] = $row['Password'];
//update user info
if(isset($_POST['update'])){
$UpdateFN = $_POST['First_Name'];
$UpdateLN = $_POST['Last_Name'];
$UpdateEM = $_POST['Email'];
$UpdatePW = $_POST['Password'];
$StorePassword = password_hash($UpdatePW, PASSWORD_BCRYPT, array('cost' => 10));
$sql = $con->query("UPDATE users SET FirstName = '{$UpdateFN}', LastName = '{$UpdateLN}', Email = '{$UpdateEM}', Password = '{$StorePassword}' where UserID=$user");
header('Location:account.php');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<p>Your account</p>
<?php echo $_SESSION[UserID]; ?><br />
<a href="logout.php">Logout</a>
<form action="" method="post" name="AccountForm" id="AccountForm" >
<input type="text" name="First_Name" placeholder="First Name" id="First_Name" required="required" value="<?php echo $_SESSION["FirstName"]?>"><br>
<input type="text" name="Last_Name" placeholder="Last Name" id="Last_Name" required="required" value="<?php echo $_SESSION["LastName"]?>"><br>
<input type="text" name="Email" placeholder="Email" id="Email" required="required" value="<?php echo $_SESSION["Email"]?>"><br>
<input type="password" name="Password" placeholder="Password" id="Password" required="required" value="<?php echo $_SESSION["Password"]?>"><br><br>
<input name="update" type="submit" value="Update">
</form>
</body>
</html>
我正在使用它,以便我可以节省我的程序的工作,然后在我重新启动它时恢复它。我觉得我做的事情很愚蠢,很抱歉,如果事情变得容易的话。
答案 0 :(得分:1)
你可能知道这一点,但是如果你的表创建语句中有INTEGER PRIMARY KEY
,那么只要你插入一个,那么该列将具有从1开始的整数值并自动递增(除非用一个显式值覆盖它)行。所以你的表看起来像这样:
id | dataObj
---+---------
1 | 0.1
2 | 0.2
3 | 0.3
4 | 0.4
5 | 0.5
所以这是错误的:
for x in range(0, len(dataHolder)):
read(dataHolder[x + 1])
在您进行迭代时,x
的值为0
,1
,2
,3
和4
。传递给dataHolder[x + 1]
的参数read()
,前4次迭代(第5次)将为0.2
,0.3
,0.4
,0.5
是IndexError
)。这意味着您的SELECT语句将选择id = 0.1
等。并且您没有这样的ID。
应该是
for x in range(len(dataHolder)): # btw, you don't need 0
read(x + 1)
(即使您没有使用调试器,也可以通过在代码中插入一些print
来轻松检测到这样的错误。例如,如果print(x)
中有read
},你知道id不是你认为的那样。)