我在使用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,但它没有什么区别。
有人可以帮助我吗?
答案 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;
我看到你没有用引号括起你的值,可能这就是问题的根源。也许表字段名称中也有一些拼写错误。一旦您真正看到查询,所有内容都会出来。