【问题标题】:Checking if a record exists with PHP and sqlite [closed]使用 PHP 和 sqlite 检查记录是否存在 [关闭]
【发布时间】:2016-02-24 00:28:09
【问题描述】:

我对编程完全陌生(通常我是系统管理员),但现在我必须做一个项目,您可以在其中使用 PHP 和 SQLite 注册和登录(别无选择)。
我需要得到一个可以查询的语句:

有没有名字来自$_POST['username']的用户

使用 SQLite。 我只是不明白...我找到了一些文章,但没有一篇对我有真正的帮助。

这是我的代码:

$db = new PDO('sqlite:mysqlitedb.db');

$sql_create_table_users = 'CREATE TABLE IF NOT EXISTS users (
    user_id INTEGER PRIMARY KEY,
    user_name TEXT,
    user_password TEXT
    )';
$db->execute($sql_create_table_users);

$username = $_POST['username'];

$sql_checkuserexist = 'SELECT * FROM users WHERE user_name = :user_name';

$stmt = $db->prepare($sql_checkuserexist);
$stmt->execute(array(':user_name'=>$username));
$result = $stmt->fetchAll();

if (count($result) > 0) {
    echo 'Exists';
} else {
    echo 'Does not exist';
}

但在这里我得到了这个错误:

致命错误:调用未定义的方法 SQLite3Stmt::exec()

此错误显示在我所在的行

$stmt->execute(array(':user_name'=>$username));

有人知道为什么吗?我的表名为“users”,有 3 行:user_id、user_name 和 user_password。

@Kostas:这是您给我的当前代码(我只使用此代码 atm):

try {
//Make your connection handler to your database
$db = new PDO('sqlite:mysqlitedb.db');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$sql_create_table_users = 'CREATE TABLE IF NOT EXISTS users (
    user_id INTEGER PRIMARY KEY,
    user_name TEXT,
    user_password TEXT
    )';
$stmt->execute($sql_create_table_users);

$sql = "SELECT * FROM users WHERE user_name = :username";
//Prepared statements so no SQL Injection occurs
$stmt = $db->prepare($sql);
//Execute your query
$stmt->exec(array(':username'=>$_POST['username']));
$result = $stmt->fetchAll();
if (count($result) > 0) {
    echo 'Exists';
} else {
    echo 'Does not exist';
}

} catch(PDOException $e) {
echo $e->getMessage();
die();
}

【问题讨论】:

  • 您需要建立数据库连接。
  • 更改为:$db = new PDO('sqlite:mysqlitedb.db');
  • 没有改变任何东西......仍然有这个错误
  • 对于执行准备好的语句也可以使用'execute'函数。
  • 检查sqlite扩展是否在服务器上。

标签: php sqlite authentication


【解决方案1】:

你可以试试下面的代码。您可以找到更多信息here

try {
    //Make your connection handler to your database
    $db = new PDO('sqlite:mysqlitedb.db');
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $sql_create_table_users = '
        CREATE TABLE IF NOT EXISTS users (
            user_id INTEGER PRIMARY KEY,
            user_name TEXT,
            user_password TEXT
        )';
    $db->exec($sql_create_table_users);

    $username = '';
    if (isset($_POST['username'])) {
        $username = $_POST['username'];
    }

    $sql = "SELECT * FROM users WHERE user_name = :username";
    $stmt = $db->prepare($sql);
    $stmt->execute(array(':username'=>$username));

    $result = $stmt->fetchAll();

    if (count($result) > 0) {
        echo 'Exists';
    } else {
        echo 'Does not exist';
    }

} catch(PDOException $e) {
    echo $e->getMessage();
    die();
}

【讨论】:

  • 非常感谢!真的没有更简单的方法吗?
  • 就我所知,PDO 和准备好的语句是最好的方法。它避免了 SQL 注入,您将拥有代码一致性。
  • 我已经完成了这段代码:$username = $_POST['username']; $sql_checkuserexist = 'SELECT * FROM users WHERE user_name = "' .$username.'"'; $stmt = $db->prepare($sql_checkuserexist); $stmt->exec(array(':user_name'=>$username)); $result = $stmt->fetchAll(); if (count($result) > 0) { echo 'Exists'; } else { echo '不存在';我的表被称为“用户”,有 3 行:user_id、user_name 和 user_password。我收到了这个错误:调用未定义的方法 SQLite3Stmt::exec() (这是 $stmt->exec(array ... 你能看到我的错误吗?
  • 首先:更改为:'SELECT * FROM users WHERE user_name = :user_name'
  • 然后也改成这样:$stmt->execute(array(':user_name'=>$username));
猜你喜欢
  • 2018-06-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2021-02-21
  • 2015-03-31
  • 2015-03-09
相关资源
最近更新 更多