如何将php连接到SQLite3不在同一目录中

时间:2018-03-23 10:08:56

标签: php sqlite

我使用SQLite3和php,当我使用相同文件夹中的所有PHP文件时可能正在工作。 但是我想用use文件夹包含Database And API脚本,另一个文件夹包含php文件插入数据和last文件夹从db中选择数据如下:

第一个文件夹 incDB 包含:

testCreate.php 文件

<?php
class mySqlite extends SQLite3{
    function __construct(){
        $this->open('test.db');
    }
}
$db = new mySqlite();
$db->exec("CREATE TABLE IF NOT EXISTS `test` (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `name`  TEXT NOT NULL);"
    );
?>

testAPI.php 文件

<?php
require_once('testCreate.php');

function insert($name){
    global $db;
    $stmt = $db->exec("INSERT INTO `test`(`name`) VALUES ('$name')");
    if($stmt){
        return true;
    }else{
        return false;
    }
}

function select(){
    global $db;
    if($stmt = $db->prepare('SELECT id,name FROM test ORDER BY `id` DESC '))
    {
        $result = $stmt->execute();
        $names=array();
        while($arr=$result->fetchArray(SQLITE3_ASSOC))
        {
         $names[]=$arr;
        }
        return $names;
    }
}
?>

第二个文件夹 cms 包含:

insert.php

<?php
if(isset($_POST['new_menu']) && !empty($_POST['new_menu'])){
    require_once('../incDB/testAPI.php');
    $qry = insert($_POST['new_menu']);
    if($qry) echo 'ok';
    else echo 'no';
}
?>
<form method='post'>
    <input type="text" name="new_menu">
    <button type="submit">ADD</button>
</form>

第三个​​文件夹 内容包含:

select.php

<?php
require_once('../incDB/testAPI.php');
$rows = select();
?>
<table>
    <thead>
        <td style="border: solid 1px #000">id</td>
        <td style="border: solid 1px #000">name</td>
    </thead>
    <?php
       foreach($rows as $row){
    ?>
    <tr>
        <td style="border: dashed 1px #000"><?php echo $row['id']; ?></td>
        <td style="border: dashed 1px #000"><?php echo $row['name']; ?></td>
    </tr>
    <?php } ?>
</table>

当我在浏览器中运行insert.php或select.php文件时,我在同一个文件夹中找到了数据库,我想在incDB文件夹中插入数据到/从数据库中选择数据。

=============== 的更新

我将testAPI.php文件更新为此

<?php
//require_once('testCreate.php');
class mySqlite extends SQLite3{
    function __construct(){
        $this->open('test.db');
    }
}
$db = new mySqlite('../incDB/test.db');
$db->exec("CREATE TABLE IF NOT EXISTS `test` (
`id`    INTEGER PRIMARY KEY AUTOINCREMENT,
`name`  TEXT NOT NULL);"
);

function insert($name){
    global $db;
    $stmt = $db->exec("INSERT INTO `test`(`name`) VALUES ('$name')");
    if($stmt){
        return true;
    }else{
        return false;
    }
}

function select(){
    global $db;
    if($stmt = $db->prepare('SELECT id,name FROM test ORDER BY `id` DESC '))
    {
        $result = $stmt->execute();
        $names=array();
        while($arr=$result->fetchArray(SQLITE3_ASSOC))
        {
         $names[]=$arr;
        }
        return $names;
    }
}
?>

仍是同样的问题。在insert.php和select.php

的同一文件夹中创建数据库

1 个答案:

答案 0 :(得分:0)

我发现了错误

testCreate.php中的open函数需要完整路径

答案是

<?php
class mySqlite extends SQLite3{
    function __construct(){
        $this->open('../incDB/test.db'); /// in this line mistake
    }
}
$db = new mySqlite();
$db->exec("CREATE TABLE IF NOT EXISTS `test` (
    `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
    `name`  TEXT NOT NULL);"
    );
?>