1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Como assim não existe ?

Discussão em 'Web Development' iniciada por joaopj, 28 de Agosto de 2007. (Respostas: 2; Visualizações: 866)

  1. joaopj

    joaopj Power Member

    Olá, o meu problema é o seguinte:
    (Isto corre em PHP 5.0.5 e SQLite 2.8.14)

    )
    PHP:
    <?php
    $title 
    $_POST["title"];
    $body $_POST["body"];
    $date $_POST["date"];
    $databasefilename '../includes/blog.sqlite2';

    if ( ! 
    file_exists$databasefilename ) ) {
    $createdb sqlite_open($databasefilename$sqliteError) or die($sqliteError);
    $createtables "CREATE TABLE posts (id INTEGER PRIMARY KEY,title VARCHAR(255) not null,body VARCHAR(225) not null,date VARCHAR(255) not null);";
    sqlite_exec($createdb$createtables);
    }

    $db $databasefilename;
    $dbhandle sqlite_open($db) or die("Could not open database");
    $query 'INSERT INTO posts (title,body,date) VALUES (".sqlite_escape_string($title).",".sqlite_escape_string($body.",".sqlite_escape_string($date.")';
    sqlite_exec($dbhandle$query);
    ?>
    O file acima escreve algumas coisas numa base de dados (se não existir, cria essa base de dados, assim como uma tabela e algumas colunas).

    PHP:
    <?php
    $db 
    "blog.sqlite2";
    $handle sqlite_open($db) or die("Could not open database");
    $query "SELECT * FROM posts";
    $result sqlite_query($handle$query) or die("Error in query: ".sqlite_error_string(sqlite_last_error($handle)));
    if (
    sqlite_num_rows($result) > 0) {
        while(
    $row sqlite_fetch_array($result)) {
        print 
    '<div class="item"><h4><a href="?p=blog&amp;post='.$row[0].'">'.$row[1].'</a></h4><p>'.$row[2].'</p><p style="font-size:80%">'.$row[3].'</p></div><br class="c1" />';
        }
    }
    sqlite_close($handle);
    ?>
    Agora este file, supostamente deveria ler os conteúdos das colunas da tabela "posts" da base de dados "blog.sqlite2"....
    Aparentemente, é possivel escrever na base de dados, e abri-la, mas eu tenho o seguinte erro quando tento ler os conteúdos, a partir do segundo file:

    Código:
    [B]Warning[/B]:  sqlite_query() [[URL="http://joaopj.freehostia.com/function.sqlite-query"]function.sqlite-query[/URL]]: no such table: posts in [B]/home/www/jjfiles.freehostia.com/includes/blog.php[/B] on line [B]5[/B]
    Error in query: SQL logic error or missing database
    Isso significa que não existe nenhuma tabela chamada "posts" não é ?
    Como é que isto é possivel, se eu criei a base de dados com esta tabela sem nenhum problema antes ?

    Obrigado
     
    Última edição: 28 de Agosto de 2007
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Não tenho a certeza do que estou a dizer, até porque nunca trabalhei com SQLite.

    PHP:

    if ( ! file_exists$databasefilename ) ) {
       
    $createdb sqlite_open($databasefilename$sqliteError) or die($sqliteError);
       
    $createtables "CREATE TABLE posts (id INTEGER PRIMARY KEY,title VARCHAR(255) not null,body VARCHAR(225) not null,date VARCHAR(255) not null);";
       
    sqlite_exec($createdb$createtables);
    }
    Supostamente, este código verifica se a base de dados existe, e se não existir é que cria a tabela. Não devias verificar se a TABELA existe, e se ela não existir é que a crias?
    A linha
    if ( ! file_exists( $databasefilename ) ) {
    diz-me "se o ficheiro da base de dados não existir". A base de dados pode existir e a tabela não, e nessa situação, a tabela não é criada.

    Se não for isto (ou se estiver a ver mal as coisas), experimenta fazer "SELECT * FROM $db.posts", e na linha seguinte, "echo $query;", como debug.
     
  3. joaopj

    joaopj Power Member

    Vou tentar...
    Mas agora apanho outro erro...
    Código:
    [B]Warning[/B]:  sqlite_open() [[URL="http://localhost/ServerRoot/mynewdesign/includes/function.sqlite-open"]function.sqlite-open[/URL]]: unable to open database: /home/xavickson/ServerRoot/mynewdesign/blog.sqlite2 in [B]/home/xavickson/ServerRoot/mynewdesign/includes/blogedit2.php[/B] on line [B]16[/B]
    E quando tento o modo de objectos orientados, apanho
    Código:
     SQLiteDatabase::__construct() [[URL="http://localhost/ServerRoot/mynewdesign/includes/function.SQLiteDatabase---construct"]function.SQLiteDatabase---construct[/URL]]: unable to open database: /home/xavickson/ServerRoot/mynewdesign/blog.sqlite2
    E não é criada nenhuma base de dados...
     

Partilhar esta Página