如何插入PDO(sqlite3)?

时间:2009-07-24 06:57:12

标签: php sqlite pdo

我在使用pdo插入sqlite3数据库时遇到了一些麻烦。你不得不原谅我对PDO的无知,这似乎来自Python的数据库界面。

所以这是我的问题。我有一个简单的插入:

$dbh = new PDO('sqlite:vets.db');
    $count = $dbh->exec("INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)");
    $dbh = null;

我只想在我的数据库上执行该SQL命令并完成它。虽然执行此脚本不会导致错误,但它永远不会更新数据库。我已经尝试了数据库本身的各种权限,甚至使它成为777,但它没有什么区别。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:22)

PDO的一大好处是您可以创建预准备语句。这是我的PHP项目中的一些代码:

$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)');
$qry->execute(array($path, $name, $message));

正如您所看到的,我使用?我要插入一个值,然后使用应该放在问号上的值数组执行查询。

如果这样做,您的查询将更加安全,并且更有可能工作(因为如果您像查询一样直接在查询中插入变量,则缺少值会阻止查询工作。)

答案 1 :(得分:3)

您的SQL查询可能有错误。您可以打印它,然后尝试在SQLite Database Browser等SQLite GUI界面中执行它。

// you can skip PDO part for now, because we know it doesn't work
// $dbh = new PDO('sqlite:vets.db');
$query = "INSERT INTO vets(name,email,clinic,streetname,citystatezip,link,phone,fax,animal,region,visible) VALUES ($name,$email,$clinic,$streetname,$citystatezip,$link,$phone,$fax,$animal,$region,$visible)";
echo $query;
// $count = $dbh->exec($query);
// $dbh = null;

我看到你没有用引号括起你的值,可能这就是问题的根源。也许表字段名称中也有一些拼写错误。一旦您真正看到查询,所有内容都会出来。