2016-02-16 5 views
0

Я запускаю небольшой веб-сервер на моем малине pi, используя nginx, php5 и sqlite3. К сожалению, когда я пытаюсь вставить некоторые данные в свою базу данных, он просто останавливается на sqlite_open(). Нет ошибок, он просто останавливается.PHP, не открывающий базу данных SQLite3

<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 s, которые я прокомментировал, говорят мне, что я добираюсь до утверждения try.

Я попробовал несколько вещей, чтобы решить эту проблему:

  • Создание базы данных с помощью sqlite3 в командной строке
  • баловаться с Nginx & PHP конфиги
    • В частности, используя свои собственные сайты с поддержкой
    • Изменение значения 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
  • Различные браузеры
    • IE ненавидит это
  • Rebooting даже

Это не будет так беситься индуцировать, если я по крайней мере, было сообщение об ошибке. gah.

ответ

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

Спасибо. Тогда это просто проблема поиска документов, запутанных. На странице для 'sqlite_open()' кто-то указал, что это было только для sqlite2, но они были полностью похоронены downvotes. – user1610406

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(); 
Смежные вопросы