Python - 使用cursor.fetchone()返回None

时间:2016-02-29 04:05:33

标签: python sql sqlite

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>

我正在使用它,以便我可以节省我的程序的工作,然后在我重新启动它时恢复它。我觉得我做的事情很愚蠢,很抱歉,如果事情变得容易的话。

1 个答案:

答案 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的值为01234。传递给dataHolder[x + 1]的参数read(),前4次迭代(第5次)将为0.20.30.40.5IndexError)。这意味着您的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不是你认为的那样。)