Php 如何插入PDO(sqllite3)?

Php 如何插入PDO(sqllite3)?,php,sqlite,pdo,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 ($nam

我在使用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,但没有任何区别


有人能帮我吗

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


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

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

$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)');
$qry->execute(array($path, $name, $message));
如您所见,我使用
插入一个值,然后使用一个值数组执行查询,该数组应该放在问号的位置


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

作为旁注(可能与您的问题无关),您是否考虑过转义您在查询中注入的数据?(见PDO::quote);或者使用准备好的语句(请参见PDO::prepare+PDO::execute)。您是否尝试检查是否没有SQL错误?(请参阅)您是否使用PDO sqlite适配器进行了其他成功的查询?此外,您的SQL语句中似乎没有围绕每个值的引号。(当然,除非每个变量中都包含引号)根据python,它与python没有什么不同。你是对的,我忘了引用我的数据。谢谢你,非常感谢你帮我澄清这件事。我不太明白这些事先准备好的陈述。非常感谢。我永远记不起为什么它要求将参数包装在数组()中(即使对于一个参数也是如此!)。为什么不接受一系列参数?好问题。。。它最有可能支持PDO的底层库。这绝对是可能的,因为PHP支持可变数量的参数。您可以使用调用父::execute(func_get_args())的
execute
来创建自己的子类。不幸的是,这不起作用。这给了我一个错误。我必须把参数放在数组中。
$qry = $db->prepare(
    'INSERT INTO twocents (path, name, message) VALUES (?, ?, ?)');
$qry->execute(array($path, $name, $message));