我正在使用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
创建数据库sqlite.assoc_case
中php.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
如果我至少有错误信息,那就不会引起愤怒。 gah。
答案 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();