2015-11-21 4 views
0

Я совершенно не знаком с программированием (обычно я - системный администратор), но теперь мне нужно сделать проект, в котором вы можете зарегистрироваться и войти в систему с помощью PHP и SQLite (альтернативы нет).
мне нужно получить заявление, в котором я могу сделать запрос:Проверка наличия записи с PHP и sqlite

is there a user with the name from $_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'; 
} 

Но здесь я получаю эту ошибку:

Fatal error: Call to undefined method SQLite3Stmt::exec()

Эта ошибка показывает в строке, где у меня есть

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

Кто-нибудь знает, почему ? Моя таблица называется «пользователями» и имеет 3 строки: user_id, user_name и user_password.

@Kostas: Это мой текущий код, который вы мне дали (я только работать с этим кодом атм):

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(); 
} 
+0

Вам необходимо подключиться к базе данных. –

+0

Перейти к: $ db = новый PDO ('sqlite: mysqlitedb.db'); –

+0

ничего не менял ... есть еще эта ошибка – MichelleH

ответ

0

Вы можете попробовать следующий код. Вы можете найти дополнительную информацию 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(); 
} 
+0

Спасибо большое! Неужели нет более простого способа сделать это? – MichelleH

+0

PDO и подготовленные заявления - лучший способ, насколько я знаю. Он избегает SQL Injection, и вы будете иметь согласованность кода. –

+0

Я сделал этот код: $ username = $ _POST ['username']; $ sql_checkuserexist = 'SELECT * FROM users WHERE user_name = "'. $ Username. '"'; $ stmt = $ db-> подготовить ($ sql_checkuserexist); $ stmt-> exec (array (': user_name' => $ username)); $ result = $ stmt-> fetchAll(); if (count ($ result)> 0) { echo 'Exists'; } else { echo 'Не существует'; } Моя таблица называется «пользователями» с тремя строками: user_id, user_name и user_password. Я получил эту ошибку: вызов неопределенного метода SQLite3Stmt :: exec() (здесь есть $ stmt-> exec (array ... Можете вы увидеть мою ошибку? – MichelleH