2014-11-01 60 views
0

我刚开始使用sqlite3,我的页面不断刷新我并不断向数据库插入数据。如果我注释掉insert execute命令,页面不会刷新。我想这可能与我与数据库的连接有关,但我不确定。提前致谢。下面是完整的代码:PHP与PDO使用sqlite3不断刷新页面

<?php 

class create { 

    function makeDB() { 
     $pdo = new PDO("sqlite:db/SSDB"); 

     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $mainDB = "CREATE TABLE IF NOT EXISTS pass (
        'rowID' INTEGER, 
        'username' CHAR(256) NOT NULL, 
        'pass' CHAR(256) NOT NULL, 
        'iv' CHAR(256) NOT NULL 
        )"; 

     $pdo->query($mainDB); 
    }  
} 

class connectDB { 

    public function connect() { 
     try { 
      $dbh = new PDO("sqlite:db/SSDB"); 
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      return $dbh; 
     } catch (PDOException $ex) { 
      echo $ex->getMessage(); 
      die(); 
     } 
    }  
} 

$connDb = new connectDB(); 
$conn = $connDb->connect(); 
$createDB = new create(); 
$createDB->makeDB(); 
$string = "hi1"; 
$salt = 'salt'; 
$encrypted_string = 'test'; 
$iv = 4; 

$sql = "INSERT INTO pass VALUES(1,:encrypted,:salt,:iv)"; 

$sqlPrepare = $conn->prepare($sql); 

$sqlPrepare->execute(array(':encrypted' => $encrypted_string, ':salt' => $salt,:iv'=> $iv)); 
+0

你是怎么称呼这个脚本的?它是一个AJAX服务器? – Barmar 2014-11-01 00:18:13

+2

你的'execute'行末尾有一个错字,你错过了'''。 – jeroen 2014-11-01 00:19:04

+0

将代码移入类connectDB? – Petro 2014-11-01 00:20:24

回答

1

根据你originally posted code/question您编辑和改写无标记它作为一个编辑,应该有人看到这一点,问为什么用相同的蜱/报价修复了答案:

首先,您在表创建代码中为您的列使用(单个)引号。

使用反引号或删除引号。

$mainDB = "CREATE TABLE IF NOT EXISTS `pass` (
      `rowID` INTEGER, 
      `username` CHAR(256) NOT NULL, 
      `pass` CHAR(256) NOT NULL, 
      `iv` CHAR(256) NOT NULL 
      )"; 

你还缺少一个报价$salt,:iv' =>$salt,':iv'

添加 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);连接打开之后发现错误,你的原代码应该扔了。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);取决于您正在使用的那个。

至于“我的网页不断我提神” - 我看不到你的页面将如何刷新。你需要详细说明这一点。

  • 您发布的问题中没有代码可以支持页面刷新或重定向。
+0

看起来像刷新是一个问题Netbeans连接器和chrome。我无法用firefox重现刷新问题,也无法在没有连接器的情况下运行chrome。我想要做更多的测试,以确保一切。这不是在连接之后立即调用它,还是我错过了一些东西:公共函数connect(){ 尝试$ dbh = new PDO(“sqlite:db/SSDB”); $ dbh-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);' – Kobaltic 2014-11-01 02:34:12

+0

@Kobaltic使用错误异常有助于将错误排除在外,您应该得到这些错误。现在,你已经用我在答案中得到的内容编辑和覆盖了你的问题/代码,而没有将它标记为“编辑”;这不是Stack在这里完成的事情。那些会访问你的问题,并将你的代码与我的代码进行比较,站在告诉自己*“这没有什么不对的地方,那么为什么用同样的代码有一个答案?” - 并且站在我的答案的下面,我计划删除有两个原因;因为我写了什么,也没有解决问题;明显。 – 2014-11-01 03:04:41