13

我在使用 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,但这并没有什么不同。

有人可以帮助我吗?

4

2 回答 2

25

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

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

如您所见,我使用?要插入值的位置,然后使用应放置在问号位置的值数组执行查询。

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

于 2009-07-24T07:14:26.693 回答
2

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

// 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;

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

于 2009-07-24T07:09:47.453 回答