PHP无法打开SQLite3数据库

时间:2016-02-16 21:07:13

标签: php nginx sqlite

我正在使用nginx,php5和sqlite3在我的覆盆子pi上运行一个小型Web服务器。不幸的是,当我尝试将一些数据插入到我的数据库中时,它只会停在sqlite_open()。没有错误,它只是停止。

<html>
<head>
<title>halp</title>
<style>
* {font-family:verdana;}
</style>
</head>
<body>
<p><h2>Log in</h2></p>
<form action="" method="POST">
<table>
<tr><td>Username</td><td><input type="text" name="user"></td></tr>
<tr><td>Password</td><td><input type="password" name="pass"></td></tr>
<tr><td><input type="submit" value="Submit"></td><td><input type="checkbox" value="r" name="r"></td></tr>
</table>
</form>
<?php
if(isset($_POST['r']) || isset($_POST['user'])){
$reg = $_POST['r'];
if($reg == 'r'){
//      echo $reg, "<br>";
        echo "Registering... <br>";
        $user = md5($_POST['user']);
        $pass = md5($_POST['pass']);
//      echo "user and pass <br>";
//      echo "user: ", $user, " pass: ", $pass, "<br>";
        try{
//              echo "inside try <br>";
                $db = sqlite_open('testdb', 0666, $error);    //stops here
                echo "error: ", $error->getMessage();
        } catch (Exception $e) {
                echo "error: ", $e->getMessage();
        }
//      echo "sqlite_open <br>";
        if(!$db) { die($error); }
        $query = "INSERT INTO users VALUES('$user', '$pass')";
        $registered = sqlite_query($db, $query);
//      echo "sqlite_exec";
        if($registered){
                echo "New user registered.<br>";
//              echo $user."        ";
//              echo $pass;
        } else { die($error); }
        sqlite_close($db);
}
else{
        $user = md5($_POST['user']);
        $pass = md5($_POST['pass']);
//      print $user."\n";
//      print $pass."\n";
        $db = new SQLite3('testdb');
        $results = $db->query("SELECT * FROM users WHERE user = '$user' AND pass = '$pass';");
        if(!$results){ echo 'Database error'; }
        else {
                $resultArray = $results->fetchArray(SQLITE3_NUM);
                if($resultArray[0] == $user && $resultArray[1] == $pass){
                        echo 'Password and username match found!';
                }
                else{
                        echo 'Password and username do not match.';
                }
        }
}
}
?>
<br>
<a href="index.html">Back</a>
</body>
</html>

一旦到达sqlite_open(),它就会停止。正如您所看到的,代码底部有index.html的链接,但是当我运行此文件时,它不会显示。我注释掉的echo告诉我,我只能尝试使用try语句。

我尝试了几件事来解决这个问题:

  • 在命令行中使用sqlite3创建数据库
  • 与nginx&amp; php配置
    • 具体来说,使用我自己的网站启用
    • 更改sqlite.assoc_casephp.ini的值。令人沮丧的是,有一个链接到php.net上不存在的页面。
  • 由于sqlite_open()创建了数据库(如果找不到),我用它来创建testdb
  • chmod a+rwx testdb
  • chmod a+rwx /var/www/html
  • 将自己添加到www-data群组
  • chgrp -R www-data /var/www/html
  • 不同的浏览器
    • IE讨厌它
  • 重新启动

如果我至少有错误信息,那就不会引起愤怒。 gah。

2 个答案:

答案 0 :(得分:3)

sqlite_open()仅支持sqlite2。使用PDO访问sqlite3数据库:

$dbh = new PDO('sqlite:testdb');

$stmt = $dbh->prepare("INSERT INTO users VALUES(':user', ':pass')");
$stmt->bindParam(':user', $user);
$stmt->bindParam(':pass', $pass);
$stmt->execute();

答案 1 :(得分:0)

你应该知道PHP有一个专门的SQLite3包,非常巧妙地命名为'SQLite3'。查看PHP手册条目。 http://php.net/manual/en/book.sqlite3.php

这里有一些应该有用的代码片段。

$db = new SQLite3.php('testdb');
$results = $db->query($query);
while($row = $results->fetchArray()){
    var_dump($row);echo "<br/>";
}
$db->close();