PHP / SQL - 不会将新用户插入表中

时间:2012-12-08 23:49:35

标签: php sql sqlite insert

我的问题是我的脚本不会将新用户信息插入我的数据库表。我不知道为什么,我一直在看这个近3个小时,试图找到问题,但我似乎无法找到它。这是我的脚本(顺便说一下,SQLITE 3):

    $db = sqlite_open("../../kinz/kinz-db.sqlite", 0666, $sqlerr);

$query_login = sqlite_query($db, "SELECT * FROM USERS WHERE USER = '$user'");
$result = sqlite_fetch_all($query_login, SQLITE_ASSOC);

$query_setId = sqlite_query($db, "SELECT * FROM USERS WHERE ID = (SELECT MAX(ID) FROM USERS)", $sqlerr);
$result2 = sqlite_fetch_all($query_setId, SQLITE_ASSOC);
$ID = $result2[0][ID] + 1;

if (count($result) >= 1) {
    $_SESSION['regErr'] = "Username already in use";
    header("Location: register.php");
    exit();
} else {
    /*This is the registration query*/$query_register = sqlite_query($db, "INSERT INTO USERS (ID, USER, DISPLAY_NAME, PASS_ENC1, PASS_ENC2) VALUES ($ID, '$user', '$displayName', '$pass_enc1', '$pass_enc2')", $sqlerr);
}

if (!$query_register) {
    $_SESSION['regErr'] = $sqlerr;
    header("Location: register.php");
    exit();
} else {
    $_SESSION['regSuccess'] = true;
}

1 个答案:

答案 0 :(得分:1)

由于INSERT是无结果的SQL语句,因此您应该使用sqlite_exec()而不是sqlite_query()。

如果sqlite_query()或sqlite_exec()返回FALSE,您还应该报告发生了什么错误。您不必输出给用户,而是输出到可以读取它的位置。目前,您只将其存储在$ _SESSION中,这可能很难访问。

以下是我的写作方式:

$query_register = sqlite_exec($db, "INSERT INTO USERS 
    (ID, USER, DISPLAY_NAME, PASS_ENC1, PASS_ENC2) VALUES 
    ($ID, '$user', '$displayName', '$pass_enc1', '$pass_enc2')", $sqlerr);

if ($query_register === false) {
    error_log("Sqlite error in file ".__FILE__." on line ".__LINE__.": "
    . $sqlerr);
}

另外,在将它们插入INSERT语句之前,我没有看到你是escaping variables。您需要小心避免SQL注入漏洞。

或者升级到SQLite3 API,它支持带有参数的prepared statements。在编写动态查询时,这对于防止SQL注入更加安全。

PDO_sqlite也支持预备语句,我建议使用PDO。